我是C#中的新成員,從PHP開始。一切都幾乎清楚了,除了我不知道究竟是什麼意思,建設界面/系列<>。C#中究竟意味着什麼<>?
我已經在使用「<>」作爲「類型定義」,但它意味着什麼。我使用它是這樣的:
class TaskComparer : IEqualityComparer<Task> ...
class TaskQueue : ConcurrentQueue<Task> ...
等你有沒有看到這方面的文章?請發佈一個鏈接。謝謝。
我是C#中的新成員,從PHP開始。一切都幾乎清楚了,除了我不知道究竟是什麼意思,建設界面/系列<>。C#中究竟意味着什麼<>?
我已經在使用「<>」作爲「類型定義」,但它意味着什麼。我使用它是這樣的:
class TaskComparer : IEqualityComparer<Task> ...
class TaskQueue : ConcurrentQueue<Task> ...
等你有沒有看到這方面的文章?請發佈一個鏈接。謝謝。
它被稱爲「泛型」,它是一種(如你所說)定義類型參數的方法。以下是關於MSDN的介紹性文章:http://msdn.microsoft.com/en-us/library/ms172192.aspx
作爲此實用程序的一個簡單示例,請考慮一個Repository模式。
public interface IRepository<T> {
public void Add (T obj);
public IEnumerable<T> GetAll();
}
通過正確的實現,現在您可以爲任何類型的實體設置存儲庫接口。
public void someMethod(IRepository<Person> personsRepo)
{
IEnumerable<Person> persons = personsRepo.GetAll();
// ...
}
最有可能的意思是generics。
的
標識符的標識符之後<
類型定義>
塊表示從generic type definition構造的類型。
這這個定義是遞歸:你可以從其他泛型類型構造的泛型類型:在你可以有數組的數組以同樣的方式,你可以構造一個字典的列表的列表,列表等。
此外,您可以使用類似的構造來構建泛型函數,除了替代類型或接口名稱,您可以使用通用函數的名稱。
您可以構建自己的泛型類型和函數定義,並直接或通過反射來訪問它們。這個概念非常強大,因爲它擴展了對其他類型構建的類型的強大輸入。
在集合的情況下,它定義集合內部的哪種類型的數據。這只是一種improfe類型安全性的方法。一個小例子:
ArrayList<Integer> test = new ArrayList<Integer>();
test.Add(1); // will work
test.Add("2"); //will throw an exception, String cannot be cast to int
這是一個Java示例,最後一行不會拋出異常 - 它將無法編譯。 –
給定類似的代碼,它也無法在C#中編譯。 –
請閱讀其他人提供的關於仿製藥的文章;不過,我在這裏給你快速介紹。
說,我們要編寫一個id函數(完全返回它的輸入)。這應該適用於每種類型,對嗎?所以,我們很自然的做法是使用object
:
object id(object x) {
return x
}
然而,每次都返回object
- 你要轉換後取回你的「混凝土」式的,就像這樣:int x = (int)id(12)
。泛型解決了這個問題。它們允許你參數化類型,以保持它一模一樣:
T id2<T> (T x) {
return x
}
望着類型簽名,你可以看到,這個版本需要任何T
並返回相同T
(更換T
與int
,你會看到)。
我希望能給你一個快速的概述。另外,請閱讀約束。
你是什麼意思「構建接口/集合'<>'」?你可以更具體一些,發表示例代碼? –
我已將其寫入問題。 – Fanda