使用方法字符串名称

时间:2018-09-20 22:05:58

标签: c# inheritance abstract-class invoke

我正在尝试一种能够调用方法派生类的动态方法。 我有2节课 第一类是基类,它具有一个方法,允许我按名称调用方法。

public abstract class Main(){
     public void DoCall (string methodName){
        Type thisType = this.GetType();
        MethodInfo theMethod = thisType.GetMethod(methodName);
        theMethod.Invoke(this, null);
     }
}

第二个是派生类,它具有我想调用的方法

public abstract class DoSomething(){
     public void Print(){
        Console.info("HELLO WORLD")
     }
}

最后,我想使用DoCall()方法调用Print(),因为我将收到一个DoSomething()类型的对象,但是我只能将其强制转换为Main()。

public void ActOnIt(object Obj){
   Main received = (Main)Obj; 
   received.DoCall("Print");
} 

我想说这是可能的,但也许我没有正确的方法。目前,我没有例外,但也看不到控制台打印。

1 个答案:

答案 0 :(得分:0)

您做事的方式可能不是正确的设计。尽管如此,它应该在技术上可以正常工作。

class Program
{
    static void Main(string[] args)
    {
        ActOnIt(new DoSomething());
        Console.ReadKey();
    }

    public static void ActOnIt(object Obj)
    {
        Main received = (Main)Obj;
        received.DoCall("Print");
    }
}

public class DoSomething:Main
{
    public void Print()
    {
        Console.WriteLine("HELLO WORLD");
    }
}

public abstract class Main
{
    public void DoCall(string methodName)
    {
        Type thisType = this.GetType();
        MethodInfo theMethod = thisType.GetMethod(methodName);
        theMethod.Invoke(this, null);
    }
}