You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 10:41:33