В С# есть ли способ сослаться на вызывающий класс в конструкторе?

Я делаю конструктор для класса в С#, и я хотел бы, чтобы он заполнял свои значения по-разному в зависимости от типа класса, который его вызвал. Например, есть класс с именем Employer и класс с именем Person. Когда экземпляр Employer вызывает new Person();, я хотел бы, чтобы конструктор в Person установил переменную Employed нового человека в true. Возможно ли это в С#?

Пытался найти ответ, но не знал, как сформулировать вопрос.

Типы данных JavaScript
Типы данных JavaScript
В JavaScript существует несколько типов данных, включая примитивные типы данных и ссылочные типы данных. Вот краткое объяснение различных типов данных...
Как сделать движок для футбольного матча? (простой вариант)
Как сделать движок для футбольного матча? (простой вариант)
Футбол. Для многих людей, живущих на земле, эта игра - больше, чем просто спорт. И эти люди всегда мечтают стать футболистом или менеджером. Но, к...
Знайте свои исключения!
Знайте свои исключения!
В Java исключение - это событие, возникающее во время выполнения программы, которое нарушает нормальный ход выполнения инструкций программы. Когда...
CSS Flex: что должен знать каждый разработчик
CSS Flex: что должен знать каждый разработчик
CSS Flex: что должен знать каждый разработчик Модуль flexbox, также известный как гибкий модуль разметки box, помогает эффективно проектировать и...
Введение в раздел "Заголовок" в HTML
Введение в раздел "Заголовок" в HTML
Говорят, что лучшее о человеке можно увидеть только изнутри, и это относится и к веб-страницам HTML! Причина, по которой некоторые веб-страницы не...
0
0
110
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

Вы не можете сделать это автоматически, нет. (Вы можете взять трассировку стека и проанализировать ее, но она будет ужасно хрупкой перед лицом оптимизации JIT-компилятора и т. д.) Я бы сказал, что это сделало бы код хрупким и трудным в обслуживании — эффект был бы как "жуткий экшен на расстоянии".

Самый простой вариант — вместо этого добавить параметр bool employed в конструктор. Тогда на каждом месте вызова действительно очевидно, как вы хотите, чтобы сконструированный объект вел себя.

Есть несколько разных способов сделать это. Первый — перегрузить конструктор.

public Person() {
   this.Employed = false;
}
public Person(bool employed) {
   this.Employed = employed;
}

Второе, что приходит на ум, — заполнять ожидаемые значения при создании экземпляра объекта.

Person myPerson = new Person {Employed = true };

Вы можете иметь multiple constructors с разными входными данными для класса:

public Person() {
   this.Employed = false;
}
public Person(bool employed) {
   this.Employed = employed;
}
public Person(bool employed,bool _isEmploye) {
    if (_isEmploye)
        this.Employed = true;
    else
        this.Employed = false;
}

И используйте соответствующие входные данные, где бы вы ни звонили:

Person p = new Person(true,true);

Другие вопросы по теме