为什么双向组合不好传递值类型?

时间:2011-09-18 20:38:01

标签: c# composition

我只有两个班级:

class A 
{
   public B b = new B();    
   public bool flag {get; set;}
}

class B
{
  public void foo()
  {
   //iterates a dataTable with column "someBoolCondition"
   // I want to set A's bool to true, after the first record that has 'true' in column
   //"someBoolCondition". Thus is thought to avoid bool memebers in each class.
  }
}

我的想法,并不像bool的价值类型那么好: 我认为这是一个问题,因为我看到“ReferenceToA.flag = true;”这一行执行但后来我没有看到A的标志变为真(保持为假)。为什么?

   class A 
    {
       public bool flag {get; set;}

       public B b = new B();
       b.ReferenceToA = this;
    }

    class B
    {    
        public A ReferenceToA {get; set} 
        public void foo()
         {
           ReferenceToA.flag = true; //...
         }
    }

是否有一种优雅的方式来像参考类型的成员那样做? 这是一种矫枉过正,应该采用不同的方式吗?

2 个答案:

答案 0 :(得分:0)

与任何参考类型相比,传递bool时你的模式实际上并没有更糟 - 它完全一样。

实际上,引用的大小(通过值传递)是32位或64位。这也是bool的大小。

答案 1 :(得分:0)

这绝对不是一种矫枉过正。可能还有其他方法来实现您在这里所做的事情,但选择一个或另一个取决于您的项目要求。 对我来说,这绝对没问题。

为简化起见,您可以考虑制作布尔属性static,这样您就可以直接从B类A.flag访问它。但是很难说,如果只是阅读你的帖子,这对你来说是非常合适的解决方案。