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

问题描述 投票:0回答:2

我有一个简单的 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# constructor null member
2个回答
1
投票

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

用这个代替:

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

1
投票

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

public AnObject() : this(InternalFunction)
{

}
© www.soinside.com 2019 - 2024. All rights reserved.