对象引用方法调用

时间:2013-12-25 18:50:28

标签: c# polymorphism

void doStuff(Object obj)
{
   obj.method1();
}

此代码无法编译,因为编译器在类method1中找不到Object,但我知道obj将实现此方法。我无法施放物体,因为我不知道它的类型。

这在VB中是可行的。我怎么能在c#中做到?

2 个答案:

答案 0 :(得分:4)

您可以对对象的get the type使用反射,get the method并将其调用:

    class SomeClass
{
    public void method1()
    {
        Console.WriteLine("Method1() called");
    }
}

class Program
{
    static void DoStuff(Object obj)
    {
        MethodInfo method = obj.GetType().GetMethod("method1");

        if(method != null) //check for null - that is returned if there is no method1
            method.Invoke(obj, new Object[]{});
    }
    static void Main(string[] args)
    {
        SomeClass someClass = new SomeClass();

        DoStuff(someClass);
    }
}

LE:但是对于我们提供更好的建议,我们需要更多关于您要实现的内容的信息,因此您可以考虑一个界面,这可能是比使用反射更好的解决方案。

答案 1 :(得分:2)

如果你不知道你将使用哪种类型然后使用接口并使用此接口作为参数而不是类型objext;)