通過實現IDisposable 接口,你寫成了兩件事:第一就是提供了一個機制來及時的釋放所有占用的托管 資源(譯注:這裡就是指托管資源,當實現了這個接口後,可
Person是一個值類型數據,在存儲到ArrayList之前它被裝箱 。這會產生一個拷貝。而在移出的Persone對象上通過訪問屬性做一些修改時, 另一個拷貝
圾回收器對內存管理表現的非常出色,並且它以非常高效的方法移除不再 使用的對象。但不管你怎樣看它,申請和釋放一個基於堆內存的對象總比申請和 釋放一個不基於堆內存
當你第一次申請黑色畫刷時,Brushes類就會創建它。然而 Brushes類就保留一個單一的黑色畫刷的引用句柄,當你再次申請時它就直接返 回這個句柄。結果就是
使用非托管資源的類型必須實現IDisposable接口的Dispose()方法來精確的 釋放系統資源。.Net環境的這一規則使得釋放資源代碼的職責是類型的使用
當你在一個函數內使用一個可處理對象時,using語句是最簡單 的方法來保證這個對象被恰當的處理掉。當這些對象被分配時,會被編譯器放到 一個try/finall
每一個using語句 生成了一個新的嵌套的try/finally塊。我發現這是很糟糕的結構,所以,如果 是遇到多個實現了IDisposable接口的對象時,我
寫構造函數是一個反復的工作。很多開發人員都是先寫一個構造函數,然後 復制粘貼到其它的構造函數裡,以此來滿足類的一些重載接口。希望你不是這樣 做的,如果是的,就
不同 之處就是編譯器沒有生成對基類的多重調用,也沒有復制實例變量到每一個構造 函數內。實際上基類的構造函數只是在最後一個構造函數裡被調用了,這同樣很 重要:你
如果派生類有另外 的清理任務,就讓它實現Dispose方法:public class DerivedResourceHog : MyResourceHog{
你創建一個新的MyClass對象時,特別指定集合的大小,你 創建了兩個數組列表。其中一個很快成為垃圾對象。初始化器在所有的構造函數 之前會執行,構造函數會創建
(譯注:這樣看上去雖然代碼很多,但我覺得 ,只要是程序員都可以一眼看出這是個三維數組的循環,但是對於foreach,我 看沒人一眼可以看出來它在做什麼! 個人
首先,Equals()決不應該拋出異常,這感覺不大好。兩個變 量要麼相等,要麼不等;沒有其它失敗的余地。直接為所有的失敗返回false, 例如null引用或者
明白ReferenceEquals(), static Equals(), instance Equals(), 和運算行 符==之間的關系。當你創建你自己的
個示例代碼展示的兩個方法是我還沒有討論 的:操作符==()和實例的Equals()方法。我會詳細的解釋這兩個,但我還沒有准 備結束對靜態的Equals()的討
擾亂了很多已經存在並使用了你設計的結構的代碼。返回 值類型的變為返回引用類型。參數也由原來的值傳遞變為現在的引用傳遞。下面 代碼段的行為將受到重創:Emplo
Conditional屬性會告訴C#編譯器,這個方法只在編譯環境變量 DEBUG有定義時才被調用。同時,Conditional屬性不會影響CheckState
兩種轉換都失敗了。但是我告訴過你,強制轉化可以在用戶定義 的類型上完成。你應該想到強制轉化會成功。你是對的--(如果)它們跟像你想的 一樣是會成功的。但是轉換