为什么我的成员变量在构造后为 null?

Why are my member variables null after construction?

提问人:J Collins 提问时间:7/31/2023 更新时间:7/31/2023 访问量:31

问:

我有一个简单的 C# 类构造函数,我正在通过单元测试运行。有两个成员:

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

和一对嵌套构造函数:

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

第一个传递函数

    private List<string> InternalFunction()
    {
        return ...
    }
}

到第二个。

在从第一个构造函数调用的第二个构造函数中,类成员被正确设置。当焦点中断回第一个构造函数时,两个成员变量都恢复为“null”。为什么?

在 Visual Studio Community 2022 中调试单元测试。

C# 构造函数 null 成员

评论

0赞 J Collins 7/31/2023
哇,我是个白痴。希望我能接受这两个答案。

答:

3赞 MakePeaceGreatAgain 7/31/2023 #1

因为这不是构造函数链接的工作方式。您不是将它们链接在一起,而是在第一个构造函数中有效地创建了与另一个实例无关的全新实例。

请改用以下命令:

public AnObject() : this(InternalFunction) { }    
public AnObject(Func<List<string>> function)
{
    this.function = function;
    this.sha256 = SHA256.Create();
}
3赞 Mad hatter 7/31/2023 #2

您正在无参数构造函数中创建一个新对象,而不是调用另一个对象。试试这个

public AnObject() : this(InternalFunction)
{

}