covariance

    16熱度

    3回答

    一般差異在C#4.0已經以這樣一種方式,它可以編寫沒有例外以下(這是C#3.0中會發生什麼)來實現: List<int> intList = new List<int>(); List<object> objectList = intList; [例非功能性:參見喬恩斯基特的答案] 我最近參加了一個會議,其中喬恩斯基特給通用差異的很好的概述,但我不知道我完全得到它 - 我理解的意義的in和o

    0熱度

    2回答

    我想用C#4.0開發Silverlight 4應用程序。 我有這樣一個案例: public class Foo<T> : IEnumerable<T> { .... } 在別處: public class MyBaseType : MyInterface { ... } 和使用我在哪裏有問題: Foo<MyBaseType> aBunchOfStuff = ne

    2熱度

    2回答

    這已經在C#4.0中引入了,但是有沒有辦法在c#3.0中實現這一點? 對於例如,考慮下面的代碼: class Base { } class Derived1 : Base { } class Derived2 : Base { } class User<T> where T : Base { } class User1 : User<Derived1> { }

    4熱度

    4回答

    我有類似下面的擴展方法: public static T GetValueAs<T, R>(this IDictionary<string, R> dictionary, string fieldName) where T : R { R value; if (!dictionary.TryGetValue(fieldName, out value))

    19熱度

    3回答

    我無法理解下面的文章: http://www.ibm.com/developerworks/java/library/j-jtp01255.html 下, 泛型不是協變 筆者狀態, 因爲ln是一個列表,添加一個浮在它似乎完全合法。但是,如果 LN用李別名,那麼 將打破類型安全承諾 在李的定義隱含 - 它是一個整數列表,這 就是泛型類型不能 協變。 我不明白它說的部分 「如果ln被別名爲li」。作者

    105熱度

    8回答

    我在理解我將如何在現實世界中使用協變和逆變方面有點麻煩。 到目前爲止,我見過的唯一例子就是舊的數組例子。 object[] objectArray = new string[] { "string 1", "string 2" }; 很高興看到一個例子,如果我能看到它在其他地方被使用,我可以在開發過程中使用它。

    6熱度

    2回答

    考慮,我有以下3類/接口: class MyClass<T> { } interface IMyInterface { } class Derived : IMyInterface { } 而且我希望能夠到MyClass<Derived>鑄造成MyClass<IMyInterface>,反之亦然: MyClass<Derived> a = new MyClass<Derived>();

    12熱度

    3回答

    我有一個相當複雜的類層次結構,其中類是相互交叉依賴的:有兩個抽象類A和C,分別包含一個返回C和A實例的方法。在他們的繼承類中,我想使用一種協變類型,在這種情況下,這是一個問題,因爲我不知道如何前向聲明繼承關係。 我得到一個「test.cpp:22:error:'虛擬D * B :: outC()'的無效協變返回類型 - 錯誤,因爲編譯器不知道D是C的一個子類。 class C; class A

    50熱度

    5回答

    的IDictionary<TKey, TValue>在.NET 4/Silverlight的4不支持協方差,即我不能做 IDictionary<string, object> myDict = new Dictionary<string, string>(); 模擬到我可以用做IEnumerable<T>現在。 大概歸結爲KeyValuePair<TKey, TValue>也不是協變。我認爲字

    15熱度

    3回答

    有投Fun<TEntity, TId>到Func<TEntity, object> public static class StaticAccessors<TEntity> { public static Func<TEntity, TId> TypedGetPropertyFn<TId>(PropertyInfo pi) { var mi = pi.GetGetMethod();