Вызовите метод производного класса из его базового абстрактного класса, используя строковое имя метода - PullRequest
0 голосов
/ 21 сентября 2018

Я пытаюсь использовать динамический подход к возможности вызова методов, производных от классов.У меня есть 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")
     }
}

В конце я хотел бы вызвать Print (), используя DoCall(), потому что я получу объект типа DoSomething (), но я могу привести его только к Main ();

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

Я хочу сказать, что это возможно, но, возможно, у меня нет правильного подхода.В настоящее время у меня нет исключений, но я также не вижу консольной печати.

1 Ответ

0 голосов
/ 21 сентября 2018

То, как вы делаете вещи, вероятно, не является правильным дизайном.Тем не менее, он должен работать технически.

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