在C#4.0出來之前,我對協變和逆變很興奮。它讓我喜歡理論上的正確性!但是,現在它已經出來了,我又回到了編寫普通的,日常的,無聊的代碼,我開始懷疑:我曾經使用過它嗎?我注意到我沒有有意識地使用它。我自己定義的接口或代表都沒有從中受益。 只有一個單個案例我後來發現我在不知不覺中使用了協變,但它非常微妙,我也可能沒有注意到它。試想X是一個基類和Y是它的後代: if (enumerableOfYs.Co
假設我有一個簡單的EventArgs子類: class MyArgs : EventArgs { }
考慮我有兩個類的事件: class MyData {
public event EventHandler<MyArgs> Method;
}
class MyObject {
public event EventHandler Method;
}
和使用他們一個
public interface IMyControl<in T> where T : ICoreEntity
{
void SetEntity(T dataObject);
}
public class MyControl : UserControl, IMyControl<DataObject> // DataObject implements ICoreEntity
{
似乎在C#4.0中,方差說明符只適用於接口類型。 假設我有ViewModel/EditModel類和一個簡單的模型層次結構。 class MyEditModel<T> where T : Base { ... }
class Derived1 : Base { ... }
class Derived2 : Base { ... }
我有接受任何類型的(只要它是從鹼衍生),另一種只接受Der