covariance

    7熱度

    3回答

    考慮下面的代碼片段 namespace ConsoleApplication1 { public delegate TResult Function<in T, out TResult>(T args); class Program { static void Main(string[] args) { Program pg =new Program(

    7熱度

    1回答

    我有一個名爲「CreateCriteriaExpression」的函數,它接受一個json字符串並從中創建一個linq表達式。 該方法由另一個稱爲「GetByCriteria」的方法調用,該方法調用「CreateCriteriaExpression」方法,然後針對實體框架上下文執行該表達式。 對於我所有的實體框架對象,「GetByCriteria」方法除了它的類型外都是相同的。所以我試圖將其轉換爲

    1熱度

    2回答

    我想利用看起來是非法的嵌套參數類型。我寧願將遞歸函數保持在原來的位置,這樣我就不必重複邏輯。然而,我的嵌套使用<Ttype>正在使CLR非常不安(請參閱代碼中列出的錯誤)。 MyMethod中的邏輯不可避免地創建了Action<ClassA>和Action<ClassB>這兩種類型的代理。有沒有辦法改變下面的代碼來完成我的目標?關於使用類型參數的一般限制是什麼(例如<Ttype>)?也許類型安全性

    6熱度

    1回答

    在這個例子中,我對應用多態性有一些麻煩。這個問題類似於我的最後一個問題 C++, virtual inheritance, strange abstract class + clone problem 有3個抽象類: class A { public: virtual A * copy() const = 0; virtual ~A() = 0; }; A::~A()

    3熱度

    2回答

    以我使用情況下,我有協變型的Foo [+ T]和類A類<:T,B <:T,C <:T, 我需要存儲一個地圖「A」 - >一個Foo [A]實例,「B」 - >一個Foo [B]實例和「C」 - >一個Foo [C]實例,這在scala中是可能的嗎? 目前我宣佈我的地圖爲Map [String,Foo [T]]]但我不能在裏面添加Foo [A],編譯器告訴我Foo [T]而不是Foo [A],這似乎

    1熱度

    3回答

    我正在測試協變返回類型並遇到此問題。 class Vehicle { int i = 3; } class Car extends Vehicle{ int i = 5; public Car returningCar(){ System.out.println("Returning Car"); return new Car();

    1熱度

    1回答

    我不知道如何陳述這個問題,因爲我不知道問題出在哪裏。我認爲它是一個基因協變問題,但是解決方案可能在其他地方找到,也可能以接口的設計方式,或者實現的註冊方式。 無論如何,該示例試圖註冊所有實現通用接口的類型,然後使用通用類型解析該類型。然後嘗試將此類型轉換爲其基本類型,以便能夠在該實現上調用方法。 嘗試投射時,它現在失敗。作爲一個例子,第一行代碼無法編譯。當被移除時,程序在嘗試轉換實現的行上失敗。

    8熱度

    4回答

    我最近決定將刷新我的關於C#基礎知識記憶,所以這可能是微不足道的,但我已經碰到了以下問題: StringCollection在.NET V1使用2.0中以創造,而不是一個object基於ArrayList字符串強類型集合(這後來被包括泛型集合增強): 在StringCollection定義以快速瀏覽,你可以看到如下: // Summary: // Represents a collection

    3熱度

    2回答

    我有一個架構,我們通過我們的數據節點爲IEnumerable<BaseNode>。這一切都很好,但是在每個子類中,我們希望將這些存儲爲List<AnotherNode>,因爲該類中的所有內容都創建並使用了AnotherNode對象(我們有大約15個不同的子類)。 使用更強類型列表的一個地方不起作用的是根類方法,該方法返回類型IEnumerable<BaseNode>以及無法返回的.net 3.5中

    3熱度

    5回答

    可以說我有一個抽象的基類,它帶有一個返回昂貴對象的純虛函數。由於它是一個昂貴的對象,我應該返回一個參考。 但是生活並不那麼簡單,比方說我有兩個從它派生出來的類:一個具有經常調用的函數,因此在實例中存儲一個副本並返回一個引用會更有效。另一個很少被調用,所以最好根據需要創建對象來保存RAM。 我以爲我可以使用協變,因爲Liskov替代原則會很開心,但當然Obj不是Obj&的子類型,所以會導致編譯錯誤。