我有一个简单的 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 中调试单元测试。
因为构造函数链不是这样工作的。您不是将它们链接在一起,而是在第一个构造函数中有效地创建类型的全新实例,这与其他实例无关。
用这个代替:
public AnObject() : this(InternalFunction) { }
public AnObject(Func<List<string>> function)
{
this.function = function;
this.sha256 = SHA256.Create();
}
您正在无参数构造函数中创建一个新对象,而不是调用另一个对象。试试这个吧
public AnObject() : this(InternalFunction)
{
}