我寫了一個非常簡單的類,採用通用參數,比如T
。現在,我要強制執行T
只能是我的自定義類型ClassA
,ClassB
和ClassC
之一,所以,我不能誤用毫無意義的類型使用它像int
,long
甚至其他類我寫的。我認爲這樣做的方法是讓這三個類在泛型類定義中實現相同的空ISomething
接口並使用where T : ISomething
。但是,我不知道這種方法(實現一個空接口)是否有意義。有沒有更好的方法來做到這一點?如何最好地實施泛型約束條件?
2
A
回答
2
這是行不通的。由於T
類型爲ISomething
,因此您只能訪問泛型類中的ISomething
成員。由於ISomething
只是一個沒有任何成員的標記接口,所以它對你沒有用處。
如果您的類共享通用功能,請將此共享功能添加到界面中。如果他們不這樣做,他們不應該實現相同的界面,你應該問自己你的設計是否正確。
請舉一個更具體的例子,也許我們可以給出更多實用的提示。
1
它取決於你想要添加什麼類型的約束以及你的類所做的操作類型。
一般來說,你應該添加約束爲您的泛型類使用
泛型類下面的例子中的類型使用方法GetString的(),這是在基類中實現的。您需要在該類型添加約束,以確保通用類會發現方法
class A
{
public string GetString()
{
return "A";
}
}
class B : A
{
public string GetAnotherString()
{
return "B";
}
}
class GenericClass<T> where T:A
{
private T _obj;
public GenericClass(T obj)
{
_obj = obj;
}
public string GetString()
{
return _obj.GetString();
}
}
public class MyClass
{
public static void Main()
{
GenericClass<A> genericClass=new GenericClass<A>(new B());
Console.WriteLine(genericClass.GetString());
Console.Read();
}
}
相關問題
- 1. 如何有條件地調用帶約束的泛型方法?
- 2. 泛型類和約束條件
- 3. 如何綁定具有約束條件的泛型類型
- 4. 如何使用泛型約束類型
- 5. 如何對Prolog事實施加約束?
- 6. 摘要泛型類的泛型約束
- 7. 如何在Swift中將類型(符合約束條件)類型化爲泛型?
- 8. 如何約束多個泛型?
- 9. 同一類型的Java泛型約束條件
- 10. C#中方法中泛型類型的約束條件#
- 11. 強制泛型實現了TypeScript中的屬性(約束泛型)
- 12. 泛型類型約束似乎沒有約束任何東西
- 13. C#泛型和約束
- 14. C#泛型約束:接口
- 15. Java泛型與約束
- 16. 自我約束泛型
- 17. 泛型約束與傳承
- 18. 如何正確實施最終條件?
- 19. 如何將具有泛型參數的類型用作約束條件?
- 20. 多約束泛型函數調用如何實際工作?
- 21. 帶有「條件」約束的C#泛型類?
- 22. 非泛型聲明不允許使用約束條件C++
- 23. 爲什麼實現具有類型約束的泛型接口的泛型類需要重複這些約束?
- 24. 禁忌搜索:如何實施「員工成對工作」約束條件
- 25. 反映了泛型類型約束
- 26. C#泛型 - 約束的類型參數
- 27. 泛型類型約束上還是
- 28. 泛型類型參數的約束
- 29. 鑄造泛型類型接口約束
- 30. 類型約束的Swift泛型數組
爲什麼要強制執行,只有你的類型可以,如果泛型類不能與類型做任何使用?聽起來更像是你想在使用泛型類的類中強制使用類型。 – jgauffin
這些課程不分享某些元素的曝光嗎?如果不是,它與泛型類有什麼關係?有什麼區別它們的?目前你的方法聽起來很不理想,但沒有足夠的信息爲你提供關於你應該做什麼的細節。 –
有什麼關於'ClassA'等,使它們在這個泛型類中使用有意義? – AakashM