2010-09-02 55 views
0

在下面的代碼中,「移動」公共類來自通用類型「提交」。 「提交」是一種方法,是DSS模型的一部分,它處理消息並接受兩個參數,一個是消息正文,一個是消息響應。瞭解方法,泛型類型之間區別的問題

我的問題是:如何或爲什麼一個類派生自一種方法?

在我看來,(因爲我只是一個初學者)「通用型」的意思只是這個...任何方法或類(通過擴展,任意的代碼「塊」)可以成爲一個類型。此外還有NO類型......一切都只是一個「階級」,你可以從派生的(但你可能不能重載字符串)

這basicly意味着實際上沒有方法或類型,而是隻類(和一些「子」類(前方法)),你可以從所有東西中派生出來?!

謝謝。 我不是在尋找專家「除了這個」answear,一些小事情是不可能的。我想確認一下,實際上,程序員正在做90%的時間。

public class Move : Submit<MoveRequest, PortSet<DefaultSubmitResponseType, Fault>> 
    { 
    public Move() 
    { 
    } 

    public Move(MoveRequest body) : base(body) 
    { 
    } 

    } 

回答

1

,提交可能是一個「行動」,因此普遍認爲是一種方法,但在你的情況下,提交確實是一個類。這可能是「Command」設計模式的一個例子,其中一個動作請求被封裝在一個對象中,因此可以被處理該命令的類傳遞並執行。

泛型,概念上說,是能夠提供一組「內部」類型中類似的功能的類。基本的例子是一個數學類,可以加,減,乘和除兩個數值類型的變量;你知道,非常先進的數學你不能做任何其他的方式。在大多數類型系統中有很多數字類型(在C#中,您有字節,短整型,長整型,浮點型,雙精度型和小數型以及無符號變量)。而不是實施一個MathByte,MathInt,MathLong等方法強烈定義他們的工作類型,或實現一個數學類與任何對象工作(並因此要求您檢查傳入的所有類型,以確定您可以工作與類型),您可以簡單地創建一個Math<T>類,其中T可以是任何數字類型。

類型參數T與方法參數不同,當你聲明一個類的實例時,你需要指定一個實例將被設置來處理的類型。該實例只能用於指定類型的對象,但您可以實例化一個Math<byte>和一個Math<decimal>以使用不同的類型。在Math中定義的方法指定類型T的輸入參數,並且在實例化時T與實例化類時聲明的類型「替換」。

泛型幫助支持DRY(「不要重複自己」)良好的編碼習慣的宗旨,同時保持類型的完整性。 MathLong,MathInt,MathByte等在它們的內部代碼中都是相似或相同的;主要區別在於它們所處理的對象的類型。您不必重寫同一班級10次,而是可以根據班級的消費者編寫一個可以更具體地定義爲其工作類型的班級。

希望這有點更具教育意義。

5

你不能從方法派生。 Submit<T, V, E>必須是一個類。

1

沒有,Submit絕對不是一個方法。一個類只能從另一個類派生,或者實現一個接口。所以,Submit必須是一個類或一個接口。

在更詳細一點