2013-04-06 53 views
4

我想以語義的方式理解泛型。例如,當我讀到人們將它們稱爲可以制定政策的結構時,抽象類似乎適合我。當我讀到人們將它們稱爲協作合同時,接口就會崩潰。語義上代表泛型

什麼是一些好的方法來思考泛型,這可能會幫助我區分它們與其他OO結構並編寫更智能的API?

+0

將它們視爲類型模板。 – RBarryYoung 2013-04-06 01:00:09

回答

1

覺得作爲模板,使其他類(類似,通用的功能是用於製作其他功能模板)。類型參數用作模板中的開口:通過在其中插入具體類型,可以將泛型類或泛型函數變爲真實的類或函數。類型參數「粘貼」模板上的指定孔,產生完整的定義。

+0

這很有趣。如果我正確地理解了這一點,就好像您正在標記由調用方定義的方法/類簽名摘要的一部分。暖和嗎?或更冷? – cocogorilla 2013-04-06 00:49:00

+0

@ user1902664正確,您會保留部分課程未完成,直到用戶提供缺少的類型信息。 – dasblinkenlight 2013-04-06 00:58:49

+0

接受這個答案對我來說最有幫助,讓我的大腦以不同的方式思考他們。謝謝。 – cocogorilla 2013-04-06 01:36:17

0

您可以將它們視爲對象類型的包裝。你正在創建一些函數來處理實例化的任何類型的對象,所以它就像一個將爲多種類型的對象執行相同工作的模板。

微軟的介紹,仿製藥可能有一些很好的說明以及泛型類的

http://msdn.microsoft.com/en-us/library/ms379564(v=vs.80).aspx

1

看來你想從自上而下的角度來理解你的理解。從定性的角度來看,它是「什麼」,然後從那裏推導出真正的意義。簡單地學習這些不同的結構而不是試圖拿出標籤是不是更容易?即從自下而上的角度來看它,並根據您現在已經瞭解的內容推斷出您自己的定性描述。

抽象類需要你實現一個屬性或方法,並且不能被實例化。它與界面有什麼區別?它要求子類選擇你的唯一基類。接口沒有這樣的限制,但要求你在實現中定義它的整個行爲,而不是依賴於在基類中定義的一些行爲。

同樣,泛型允許您將類型作爲變量引入,可以由調用方指定。這一功能類似於一般的方法參數,只是更高一級。換句話說,方法參數允許您根據調用者指定的某些輸入來改變實現。通用參數允許您根據調用者指定的一些(其他)輸入(即類型)來改變實現。

當然很清楚爲什麼List<T>ArrayList更有用。我不確定爲什麼隱喻對理解原因有幫助。

+0

我真的很感謝你的努力。但我不得不大聲笑......我走了一半,所有的細節都轉向了我大腦中的狼吞虎嚥。我個人很難從這些部分獲得洞(我的妻子沒有)。如果我能得到一個形態...然後突然部分開始落到位。我見過很多列表 vs ArrayList的例子,但我最終將泛型視爲容器,這是限制性的。 雖然你的參數比較有幫助。謝謝。 – cocogorilla 2013-04-06 01:15:30

+0

@ user1902664,但是你明白爲什麼'List '作爲這些類的*消費者*優於'ArrayList'?如果是這樣,那麼對於您來說,嘗試自己實現其中一個類(或類似它的類)是一個簡單的步驟。一旦你做到了,我保證它會隨着理解而來。 – 2013-04-06 01:16:43

+0

是的。作爲列表和ArrayList的消費者,我完全理解優勢。實際上,試圖實現一個原因就是爲什麼我問這個問題......因爲我不確定我是在抓這個原因,所以我很不確定我是否正確地使用它。也許一個界面可以滿足我的目的,或者一個通用的界面真的很有用。我不能說,直到我把握它。 – cocogorilla 2013-04-06 01:29:43