Можете ли вы получить информацию о том, какой ребенок вызвал конструктор в C#? - PullRequest
2 голосов
/ 09 апреля 2020

Я пытаюсь получить информацию о том, какой ребенок звонил родителю-конструктору. Мне не разрешено передавать аргумент в конструктор. Возможно ли что-то подобное?

class Parent {
 Parent() {
  Console.WriteLine("Child1 called me");
 }

}
class Child1: Parent {
 string name;
 Child1(string name) {
  this.name = name;
 }

}
class Child2: Parent {
 string surname;
 Child1(string surname) {
  this.surname = surname;
 }

}

1 Ответ

2 голосов
/ 09 апреля 2020

GetType() все еще будет работать здесь и не является virtual (что ограничивает количество проблем, которые вы можете получить в неинициализированных полях, что является проблемой при вызове virtual методов из конструктора); Вы всегда можете исследовать дерево, если задействовано несколько типов:

    public Parent()
    {
        var type = GetType();
        while (type != typeof(Parent) && type != null)
        {
            Console.WriteLine(type.Name);
            type = type.BaseType;
        }
    }

Если у нас есть:

class Child3 : Child2
{
    public Child3(string surname) : base(surname) { }
}
// ...
new Child3("whatever");

Тогда будет выведено:

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