构造后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
相关产品推荐
相关产品推荐

