Visual Studio调试器中出现了一些奇怪的东西

本文关键字:调试器 Studio Visual | 更新日期: 2023-09-27 17:58:59

我有一个带有私有成员_stuffs的类,它的类型是IStues接口。

当我在离开构造函数之前设置一个断点时,当在断点处调试和观察变量时,局部变量_stuffs不为null(用MyStuffs Object填充),而这是_当返回调用方实例MyModelApp时,填充为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
   }    
}

Visual Studio调试器中出现了一些奇怪的东西

您是否意识到您实际上是在给局部变量赋值,而不是给实例变量赋值?

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);
}

仔细查看您的构造函数:

public MyModelApp(object parent)
   : base(parent)
{
   IStuffs _stuffs = new MyStuffs(this);
}

您正在声明一个名为_stuffs局部变量,并给它一个值。这是而不是与字段_stuffs相同。我强烈怀疑您不想要局部变量——您只想初始化字段:

public MyModelApp(object parent)
   : base(parent)
{
   _stuffs = new MyStuffs(this);
}

您正在将_stuffs创建为一个新的局部变量,而不是创建为具有全局作用域的private IStuffs _stuffs。我假设您的意思是将new MyStuffs(this);分配给全局字段_stuffs,而不是创建一个全新的对象,因为目前您有两个不同的变量,但由于它们的名称相同,您会感到困惑。

private IStuffs _stuffs;
public MyModelApp(object parent)
  : base(parent)
{
   _stuffs = new MyStuffs(this);
} 

以上是正确的方法,创建一个新的MyStuffs对象作为全局范围中的变量,而不是本地范围。