C#中构造函数能否引用调用类并根据其类型调整属性赋值?
问题:C#中能否根据构造函数的调用类类型差异化设置Person类属性?
我正在为C#中的Person类编写构造函数,期望根据调用该构造函数的类类型来差异化设置属性值。举例来说,存在Employer类与Person类,当Employer的实例调用new Person();时,希望Person的构造函数将新实例的Employed变量设为true。请问该需求在C#中是否可实现?
此前尝试搜索答案,但因表述问题未找到结果。
可行方案说明
根据相关反馈,若不明确传递引用,类或函数无法直接获取调用者信息。起初我认为构造函数无法满足需求,但编写以下示例代码后找到了可行方案:
public class Person { bool employed = false; void setDefaultValues() { // 执行默认初始化逻辑 } // 无参构造函数 public Person() { setDefaultValues(); } // 类型安全的构造函数:接收Employer实例 public Person(Employer em) { setDefaultValues(); employed = true; } // 适配性构造函数:接收调用者类型 public Person(Type ty) { setDefaultValues(); if (ty == typeof(Employer)) { employed = true; } } } public class Employer { // 此Person实例的employed为false Person nonemployee = new Person(); // 此Person实例的employed为true:通过类型安全构造函数,可访问调用者的所有属性 Person employee1 = new Person(this); // 此Person实例的employed为true:通过适配性构造函数 Person employee2 = new Person(this.GetType()); }
上述方案通过两种重载构造函数实现需求:
- 类型安全构造函数:直接接收
Employer实例,不仅能设置employed为true,还可以在需要时访问调用者的属性和方法; - 适配性构造函数:接收调用者的
Type对象,通过类型判断来设置属性,扩展性更强,后续新增其他调用类时只需修改条件判断即可。
内容的提问来源于stack exchange,提问作者Wiley Rush
相关产品推荐
相关产品推荐

