covariance

    5熱度

    3回答

    概念'協方差'和'逆變'的含義是什麼? 鑑於2班,動物和大象(從動物繼承),我的理解是,如果你試圖把大象到動物的數組,你會得到一個運行時錯誤,這是因爲大象比動物「更大」(更具體)。但是,你能否將一隻動物放入一系列大象,看看大象如何保證包含動物特性?

    7熱度

    2回答

    我很難弄清楚這一點。假設我有以下代碼: class Animal { } class Mammal extends Animal { } class Giraffe extends Mammal { } ... public static List<? extends Mammal> getMammals() { return ...; } ... public static voi

    11熱度

    6回答

    我怎麼能投 from ObservableCollection<TabItem> into ObservableCollection<object> 這並不爲我工作 (ObservableCollection<object>)myTabItemObservableCollection

    2熱度

    4回答

    我使用的是從一個抽象基類派生來存儲實體的項目,也從一個抽象基類派生泛型集合類層次結構的泛型集合的方法: abstract class ItemBase { } class MyItem : ItemBase { public MyItem() { } } abstract class CollectionBase<T> : Collection<T> w

    2熱度

    2回答

    我知道關於協變性,而且我知道一般情況下,直到4.0版本纔可能在C#中使用。 但是我想知道一個具體的案例。有沒有辦法通過創建一個實際上不執行查詢的包裝類來轉換IQueryable<Derived>到IQueryable<Base>,但實際上可以「傳遞」.Where<>()調用? 我的使用案例是,我正在嘗試處理具有許多類似表的數據庫模式。大多數字段是相同的,並且需要在每個表格上查詢許多常用字段。我正在

    8熱度

    6回答

    public void wahey(List<Object> list) {} wahey(new LinkedList<Number>()); 對方法的調用不會進行類型檢查。我甚至不能投的參數如下: wahey((List<Object>) new LinkedList<Number>()); 從我的研究,我已經收集,對於不允許這樣做的原因是類型安全。如果我們允許做上述情況,那麼我們

    1熱度

    1回答

    我有以下代碼: public abstract class TestProperty { public abstract Object PropertyValue { get; set; } } public class StringProperty: TestProperty { public override string PropertyValue {get;s

    2熱度

    3回答

    我想知道爲什麼C#團隊決定不支持非泛型的共同/反變換,因爲他們可能同樣安全。這個問題相當主觀,因爲我不希望有團隊成員迴應,但有人可能有我(和芭芭拉麗斯科夫)缺乏的洞察力。 讓我們看看這個樣本接口: public interface ITest { object Property { get; } } 下面的實現會失敗,雖然完全安全的(我們總是可以返

    14熱度

    4回答

    假設我有這些抽象類Foo和Bar: class Foo; class Bar; class Foo { public: virtual Bar* bar() = 0; }; class Bar { public: virtual Foo* foo() = 0; }; 進一步假設我有派生類ConcreteFoo和ConcreteBar。我想協變細化的fo

    14熱度

    2回答

    鑑於這種神奇的接口: public interface IHat<out TRabbit> { TRabbit Take(); } 而這種類層次結構: public class Rabbit { } public class WhiteRabbit : Rabbit { } 現在我可以編譯這樣的: IHat<WhiteRabbit> hat1 = null; IHat<