C#中没有类的多态性
本文关键字:多态性 | 更新日期: 2023-09-27 17:59:47
我是面向对象编程的新手。问题是,当我们在类中定义一个方法时,我们可以这样使用该方法:
myobj.mymethod(params);
但我不希望我的方法是类的成员,但仍然是多态函数。我的意思是,我希望它是一个"自由"函数,根据它的参数做不同的事情。例如:
mymethod(myobjoftype1, intvar); // works with ints
mymethod(myobjoftype2, stringvar); // different function that works with strings
这在C#中可能吗?
在C#中创建一个"独立方法"是不可能的,因为所有东西都是一个类或类的成员。
对于您的问题,我建议使用一个只有静态方法的静态类。
用法:
ClassName.MethodName();
所有具有不同参数的方法都应该在这个特定的类中实现(方法重载)。
但如果它不适合您,您应该看看泛型方法(但在这种情况下,您还需要创建至少一个类)。
所有方法或函数都可以从某些所有者(类或结构)调用
namespace CustomNamespace
{
// public static SomeFreeMethod(some params) { } <- This can't be in C#
// For your case you can use code samples below
public static class SomeStaticClass {
public static void SomeMethod() { }
public static void SomeMethod(object p1, object p2);
public static void SomeMethod(object p1, object p2, object p3);
public static T SomeMethod<T>(T o1, T o2, T o3) { return default(T); }
}
public class SomeInstanceClass {
public SomeInstanceClass() {
// call methods from static class in instance of object
SomeStaticClass.SomeMethod();
SomeStaticClass.SomeMethod(3, 6);
SomeStaticClass.SomeMethod('c', "dasda", 3);
float someResult = SomeStaticClass.SomeMethod<float>(3.45f, 312.233f, 3.14f);
}
}
}
May be Type Dynamic对您很有用。
类型是静态类型,但类型为dynamic的对象会绕过静态类型检查。
https://msdn.microsoft.com/en-us/library/dd264736.aspx
您可以在不使用特定类的情况下执行类似操作
我假设您实际上不想仅仅为了方法重载而创建类。
public void Main() // Your main method
{
mymethod("fff", 2); // Will call first mymethod
mymethod(2.13, "ff"); // Will call second mymethod
}
void mymethod(string str, int intvar)
{
Console.WriteLine("m1");
}
void mymethod(double flt, string stringvar)
{
Console.WriteLine("m2");
}
演示