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