C#中没有类的多态

时间:2015-06-26 11:08:30

标签: c# polymorphism

我是面向对象编程的新手。问题是,当我们在类中定义方法时,我们可以用这种方式使用该方法:

myobj.mymethod(params);

但我不希望我的方法成为该类的成员,但仍然是一个多态函数。我的意思是,我希望它成为一个免费的"根据参数执行不同操作的函数。例如:

mymethod(myobjoftype1, intvar); // works with ints
mymethod(myobjoftype2, stringvar); // different function that works with strings

这在C#中是否可行?

4 个答案:

答案 0 :(得分:2)

制作一个独立的方法'在C#中是不可能的,因为一切都是类或类的成员。

对于您的问题,我建议使用只有静态方法的static类。

用法:

ClassName.MethodName();

所有具有不同参数的方法都应该在这个特定的类中实现(方法重载)。

但如果它不适合你,你应该看看generic methods(但在这种情况下你还需要创建至少1个类。)

答案 1 :(得分:0)

可以从某些所有者(类或结构)调用所有方法或函数

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

答案 2 :(得分:0)

可能是Type Dynamic对您有用。

类型是静态类型,但动态类型的对象绕过静态类型检查。

https://msdn.microsoft.com/en-us/library/dd264736.aspx

答案 3 :(得分:-1)

您可以在不使用特定类的情况下执行此类操作

我认为你实际上并不想仅仅为了方法重载而创建类。

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

DEMO