2011-09-18 57 views
1

我只有2類:爲什麼雙向構圖不適合傳遞值類型?

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. 
    } 
} 

我的想法,不是那麼好,因爲布爾是值類型的:我認爲這是一個問題,因爲我看行 「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; //... 
     } 
    } 

有一種優雅的方式做它像爲引用類型的成員? 它是一種矯枉過正,應該以不同的方式做?

+0

我不明白你爲什麼說有一個與布爾對比基準類型的問題。參考是32位或64位,而布爾佔用相同的內存 - 所以沒有區別。 –

+0

我看行 「ReferenceToA.flag = TRUE;」被執行,但後來我沒有看到A的標誌變成真(保持假)。這是爲什麼? –

回答

0

你的模式其實不差通過比任何引用類型BOOL時 - 這是完全一樣的。

事實上基準(由值來傳遞)的大小是32位或64位。這也是bool的大小。

+0

我看到一行「ReferenceToA.flag = true;」被執行,但後來我沒有看到A的標誌變成真(保持假)。這是爲什麼? –

+0

這不可能......你可以發表你的整個代碼 –

+0

不明白這一點,但現在它的工作原理 –

0

這並不是絕對是矯枉過正。可能還有其他的方式來實現你在這裏做的事情,但選擇一個或另一個取決於你的項目需求。 對我來說這絕對沒問題。

爲了簡化您可以考慮製作布爾屬性static,因此您可以直接從B類訪問它A.flag。但是很難對我說,如果在這種情況下,通過閱讀你的文章,這對你來說是非常合適的解決方案。

相關問題