Q
泛型類的價值?
0
A
回答
1
那麼讓我們說你有repersents數據庫表中的類,你會需要像Save()
方法,Delete()
- 這在任何數據庫表的實體工作,不分類型,它們都運行相同的方式(一通用方式)。
所以要解決,你可以使用一個通用類,像這樣:
public class BaseEntityModel<T> where T : IEntity2 // We use llblgen here
{
// ... code
// T is a generic type parameter which has to implement IEntity2.
// But we don't care what type it is.
public T Entity { get; set; }
public void Save()
{
Entity.Save(); // Save is from IEntity2
}
// ... code
}
那麼對於一個客戶類,我們可以這個樣子
public class Customer : BaseEntityModel<CustomerEntity>
{
public void Method()
{
// Entity is of type Customer entity
Entity.CustomerName = "Bob";
base.Save();
}
}
,然後一個公司
public class Company : BaseEntityModel<CompanyEntity>
{
public void Method()
{
// Entity is of type Company entity
Entity.CompanyName = "My Company";
base.Save(); // Save is declared in the base class for a generic type (in this case company)
}
}
這個代碼示例,它允許在不同類型的對象上使用相同的通用代碼,並且c被約束到某些類型的對象(使用where T : IMyInterface
)
有更多的方法來約束我可以使用的對象的類型。此信息是MSDN
1
MSDN在Advantages and Limitations of Generics上有一篇非常全面的文章。基本上,當使用泛型時,可以減少類型檢查的麻煩,以確保類型安全性,類型兼容性等等。它們在編譯時都會爲您處理。
他們可以幫助你避免重複代碼 - 例如,而不是寫FooMethod(int arg)
,FooMethod(string arg)
等,你可以只寫FooMethod<T>(T arg)
,這是更清潔和更容易維護。
另請注意,您可以使用where
關鍵字添加constraints on generic type parameters。這對於確保泛型類型參數實現某個接口,或者使用默認的無參數構造函數等非常有用。
1
您獲得代碼重用 - 相同的源代碼和邏輯,使用不同的具體類型進行實例化,類型的組合。槓桿。
1
泛型允許您實現類型安全的例程,該類型安全的例程將支持在例程中執行的操作的任何類型。這樣,即使所有類型的處理方式與源代碼完全相同,您也不必多次定義相同的類或函數來處理不同的類型。
0
你或多或少是對的:除了非常奇怪的地方,你主要在收藏中使用它們。但是你使用收集無處不在,所以泛型是天賜之物。
相關問題
- 1. 泛型類枚舉的,價值
- 2. Java泛型:由價值
- 3. 創造價值嵌套泛型類型,它assigne可變
- 4. 泛型類型的泛型?
- 5. 的Java泛型類型泛型類型
- 6. 從泛型類到泛型基類的值
- 7. 如何使用泛型類型的泛型列表泛型類
- 8. C++等價的Java泛型
- 9. 泛型 - 泛型類的類<T>
- 10. Java泛型:聲明泛型類型的映射值
- 11. 泛型類型的缺省值?
- 12. 如何比較泛型類型的值?
- 13. 泛型 - 從類獲取價值<T>
- 14. 什麼類型的價值?
- 15. 嵌套泛型泛型類
- 16. 泛型類型類
- 17. 泛型類型
- 18. 泛型類型
- 19. 泛型類型
- 20. 泛型類型
- 21. 泛型類型
- 22. 泛型類型的子類
- 23. 的類型泛型類
- 24. 如何擴展在C#中返回泛型值的泛型類?
- 25. 在泛型類中訪問泛型數組中的值
- 26. Java泛型類和非泛型類
- 27. 類型參數約束 - 沒有泛型(或最近的報價!)
- 28. 在Java中結合泛型類型的Scala等價物?
- 29. 泛型函數和值類型
- 30. 泛型類型和賦值問題
+1:用於給出*具體*使用泛型類。 – rsenna 2010-11-04 02:34:57