contravariance

    5熱度

    4回答

    在C#4.0出來之前,我對協變和逆變很興奮。它讓我喜歡理論上的正確性!但是,現在它已經出來了,我又回到了編寫普通的,日常的,無聊的代碼,我開始懷疑:我曾經使用過它嗎?我注意到我沒有有意識地使用它。我自己定義的接口或代表都沒有從中受益。 只有一個單個案例我後來發現我在不知不覺中使用了協變,但它非常微妙,我也可能沒有注意到它。試想X是一個基類和Y是它的後代: if (enumerableOfYs.Co

    3熱度

    3回答

    我常常忘了,如果我有定義covarient和contravarient泛型類型時使用in或out。在Java中,我有助記符PECS(生產者擴展消費者超級)來幫助我。你知道類似於c#的助記符嗎?

    0熱度

    1回答

    假設我有一個簡單的EventArgs子類: class MyArgs : EventArgs { } 考慮我有兩個類的事件: class MyData { public event EventHandler<MyArgs> Method; } class MyObject { public event EventHandler Method; } 和使用他們一個

    1熱度

    1回答

    時,我有以下類/性狀斯卡拉 trait Write[-T] { def add(elem : T); } class ContraListWrapper[T] (var list : List[T]) extends Write[T] { def add(elem : T) = { list = elem :: list } } def bar(

    5熱度

    2回答

    在通過C#第三版CLR CLR有,我似乎無法弄懂一個例子: 不變意味着該通用 類型參數不能改變。在本章中,我已經示出了 只有不變的通用類型 參數。 n 反義含義通用 類型參數可以從類 更改爲從它派生的類。在C#中,你 表明逆變泛型類型 參數與在關鍵字。 反變換泛型類型參數 只能出現在輸入位置 ,如方法的參數。 n 協變意味着通用 類型參數可以從類 更改爲其基類之一。在C#中,你的 表示covari

    12熱度

    3回答

    這段代碼不在LINQPad中編譯。 void Main() { (new[]{0,1,2,3}).Where(IsNull).Dump(); } static bool IsNull(object arg) { return arg == null; } 編譯器的錯誤信息是: 否過載關於 'UserQuery.IsNull(對象)' 匹配委託 'System.Func' 它爲

    2熱度

    1回答

    public interface IMyControl<in T> where T : ICoreEntity { void SetEntity(T dataObject); } public class MyControl : UserControl, IMyControl<DataObject> // DataObject implements ICoreEntity {

    5熱度

    2回答

    我需要一個泛型函數的集合,但我無法按照我喜歡的方式完成它。 我創建了一個 List[(Any)=>Unit] 但只要我嘗試插入功能,例如 String=>Unit 我得到一個錯誤。我怎麼能聲明一個不考慮參數和返回值類型的通用函數集合?

    9熱度

    2回答

    我想我會解釋一些例子我的問題.. interface IModel {} class MyModel : IModel {} interface IRepo<T> where T: IModel { } class Repo : IRepo<MyModel> { } // Cannot implicitly convert.. An explicit convertion ex

    1熱度

    1回答

    似乎在C#4.0中,方差說明符只適用於接口類型。 假設我有ViewModel/EditModel類和一個簡單的模型層次結構。 class MyEditModel<T> where T : Base { ... } class Derived1 : Base { ... } class Derived2 : Base { ... } 我有接受任何類型的(只要它是從鹼衍生),另一種只接受Der