[英]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.