Получение дочернего класса с отражением от родительского класса в c # - PullRequest
2 голосов
/ 10 ноября 2010

В следующем коде:

using System;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            MyChild x = new MyChild();
            System.Console.ReadKey();
        }
    }

    class MyParent
    {
        protected static void TestFunction()
        {
            System.Console.WriteLine(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
        }
    }

    class MyChild : MyParent
    {
        public MyChild()
        {
            TestFunction();
        }
    }
}

Я хочу, чтобы статический метод вывел «ConsoleApplication1.MyChild», поскольку это тип вызова. Это возможно? Я не могу найти его нигде в отражающих объектах.

1 Ответ

2 голосов
/ 10 ноября 2010

Вы не можете сделать это статическим методом, поскольку вы не действительно вызываете его для экземпляра MyChild. Он всегда будет вызываться только на MyParent.

Обратите внимание, что это, вероятно, даже не будет работать, если вы сделаете метод нестатичным, поскольку вы спрашиваете, какой тип объявляет метод, который выполняется, который на самом деле является родительским классом (дочерним классом не объявляет метод, он просто наследует его).

Однако, если вы сделаете метод нестатичным, у вас будет доступ к GetType() методу экземпляра, который вернет вам именно тот тип, который вам нужен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...