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

构造后C#类成员变量为何为null?

问题原因分析:无参构造函数错误创建新对象导致成员变量为null

问题核心出在无参构造函数的实现逻辑上:你在无参构造里调用new AnObject(InternalFunction),这是创建了一个全新的AnObject实例,而非对当前正在初始化的实例进行成员赋值。

举个典型的错误实现示例:

public class AnObject
{
    private Func<List<string>> function;
    private SHA256 sha256;

    public AnObject()
    {
        // 错误:生成临时新对象,和当前实例无关
        new AnObject(InternalFunction);
    }

    public AnObject(Func<List<string>> func)
    {
        function = func;
        sha256 = SHA256.Create();
    }

    private List<string> InternalFunction()
    {
        return new List<string>();
    }
}

当调用无参构造时,new AnObject(InternalFunction)会生成一个临时实例,这个临时实例的成员确实被正确初始化,但它和你正在创建的目标实例是完全独立的两个对象。因此目标实例的function和sha256始终是默认的null。

正确的做法是使用C#的构造函数链语法this(...),直接复用带参构造的逻辑初始化当前实例:

public AnObject() : this(InternalFunction)
{
    // 可添加无参构造特有的逻辑(如果需要)
}

this()语法会直接将带参构造的初始化逻辑作用于当前实例,而非创建新对象,这样就能保证成员变量被正确赋值。

内容的提问来源于stack exchange,提问作者J Collins

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 10:42:01