我有一些私有成员_stuffs的类,它是IStuffs类型的接口。
当我在离开构造函数之前设置断点时,在断点处调试和观察变量时,局部变量_stuffs不为null(用MyStuffs对象填充),而this._stuffs为null,当返回时调用者实例MyModelApp._stuffs保持为null。为什么没有使用MyStuffs对象设置?
public class MyModelApp : ModelApp, IModelApp
{
private App _parent;
private IStuffs _stuffs;
public MyModelApp(object parent)
: base(parent)
{
IStuffs _stuffs = new MyStuffs(this);
// Break point here
}
}
答案 0 :(得分:3)
您是否意识到您实际上是在分配局部变量而不是实例变量?
private IStuffs _stuffs;
public MyModelApp(object parent)
: base(parent)
{
IStuffs _stuffs = new MyStuffs(this);//This is a local variable
//If you need local variable also here, just rename it
//or use this qualifier
this._stuffs = new MyStuffs(this);
}
答案 1 :(得分:2)
仔细查看构造函数:
public MyModelApp(object parent)
: base(parent)
{
IStuffs _stuffs = new MyStuffs(this);
}
您声明了一个名为_stuffs
的局部变量并为其赋值。那个不与字段_stuffs
相同。我强烈怀疑你不想要一个局部变量 - 你只想初始化该字段:
public MyModelApp(object parent)
: base(parent)
{
_stuffs = new MyStuffs(this);
}
答案 2 :(得分:2)
您正在创建_stuffs
作为新的本地变量,而不是private IStuffs _stuffs
,它具有全局范围。我假设您的意思是将new MyStuffs(this);
分配给全局字段_stuffs
,而不是创建一个完整的新对象,因为目前您有两个不同的变量,但是您会感到困惑,因为他们具有相同的名称。
private IStuffs _stuffs;
public MyModelApp(object parent)
: base(parent)
{
_stuffs = new MyStuffs(this);
}
以上是正确的方法,创建一个新的MyStuffs
对象作为全局范围中的变量而不是本地范围。