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#中没有类的多态性

在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"); 
}

演示