}
}
當 foreach 語句在某個對象集合中使用迭代時,它將執行 GetEnumerator 方法并接收轉換為 Base 類型的 Derived 實例作為它的迭代程序類型。當然,Base 類型無需為了調用它的 Current 和 MoveNext 方法而實現 Ienumerator 接口。在早期編譯器中,Derived 類型的 Dispose 方法不被調用,因為它不實現 IEnumerator,并且類 Base 對于實現 Idisposable 不是靜態已知的。在新的編譯器中,Dispose 方法被調用,因為編譯器在所有 foreach 語句的迭代程序類型中檢查是否存在 Idisposable 接口。由于 GetEnumerator 調用的結果是一個轉換為 Base 類型的 Derived 類型,并且由于 Derived 類型實現 Idisposable 接口,因此編譯器動態檢查 Idisposable 接口是否存在,會導致對 Dispose 方法的調用。
ECMA C# 標準明確禁止為相應的屬性創建獲取和設置函數。實際上,C# 編譯器將屬性聲明轉換為獲取和設置函數,以便不支持屬性的語言也可以訪問數據。因此,下面的代碼是無效的,因為編譯器會產生 get_Prop 和 set_Prop 方法,而這兩個方法與用戶聲明的方法發生沖突: