簡體   English   中英

通用接口

[英]Generic interfaces

這是我的代碼

public interface ITranslator<E, R>
{       
    E ToEntity<T>(R record);
}

class Gens : ITranslator<string, int>
{
    #region ITranslator<string,int> Members

    public string ToEntity<MyOtherClass>(int record)
    {
        return record.ToString();
    }

    #endregion
}

當我編譯它時,我得到一個錯誤Type parameter declaration must be an identifier not a type

為什么我不能擁有ToEntity<MyOtherClass>但只能擁有ToEntity<T> ??

編輯: MyOtherClass在做什么? 我在多個表/類之間轉換實體(相當於實體框架的POCO)和記錄(框架返回的對象)。 所以我想用它來進行我的類特定轉換

您的接口有一個通用的ToEntity<T>方法,您在實現類Gens中將其ToEntity<MyOtherClass>為非泛型的ToEntity<MyOtherClass> 泛型方法可以采用任何類型參數,可能在T上有某些約束。您的Gens類試圖僅為類型參數MyOtherClass提供ToEntity的定義,這違背了泛型的目的。)

在你的代碼示例中,不清楚你的Gens類是如何嘗試使用MyOtherClass類型的; 它肯定不涉及ToEntity的邏輯。 我們需要更多信息才能為您提供更多指導。

為了說明,這里是您目前對ITranslator<E, R>界面的定義,用簡單的英語:

“我提供了一種機制,將類型R任何記錄轉換為E類實體, 這種機制依賴於任何用戶指定的類型T

另一方面,你的Gens類,它目前的設計方式,“實現”上面的界面,如下所示:

“我可以將整數轉換為字符串。我提供了允許用戶指定類型來控制如何執行此轉換的錯覺 ,但實際上沒有類型的選擇MyOtherClass類以某種方式涉及;這就是我所能說的“。

從這兩個描述中可以清楚地看出, Gens並沒有真正做到ITranslator<E, R>接口所保證的 也就是說,它不願意為其ToEntity方法接受用戶指定的類型。 這就是為什么這段代碼不能為你編譯的原因。

您必須在泛型類型上聲明約束。

public string ToEntity<T>(int record) where T : MyOtherClass

在LINQpad中為我編譯好。 也許你在某個地方有一個名為E,R或T的類型?

啊,我看到你正在嘗試做什么......你已經將MyOtherClass定義為某個類,但是你試圖將它用作ToEntity中的類型參數。 您希望MyOtherClass如何參與ToEntity?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM