Visual Studio Debugger中的一些奇怪之处

时间:2014-04-19 19:03:31

标签: c# visual-studio-2010

我有一些私有成员_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
   }    
}

3 个答案:

答案 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对象作为全局范围中的变量而不是本地范围。