2014-01-21 40 views
2

泛型參數我發現了一個泛型類的網頁這樣的定義:跳過需求

A := TVertex<Integer>.Create(); 
    A.Name := 'A'; 

​​

一個TVertex類的單個實例與下面的代碼創建在這個例子中,我們將T定義爲整型數據類型。我的問題現在如下所示:

如果我的用例不需要任何assigend數據類型T,那麼如果我可以跳過數據類型的規範,它會好得多/符合邏輯。我失敗了:

A := TVertex<>.Create(); 
    A.Name := 'A'; 

任何更改以避免在創建過程中切換數據類型?

+2

當然。如果您不需要泛型,請爲您的類製作非通用版本。 –

+0

我同意。如果您喜歡TVertex功能,並且不想將其重寫爲非泛型,則只需使用Int,然後忽略數據字段。 –

+0

在Java中,有一個Void類型用於確切地說明這種情況,您完全不使用它(如果泛型類位於第三方代碼中,那麼您可能需要這樣做): 因此,沒有這種類型在Delpih,對吧? –

回答

4

你明確要求的有一個明顯的缺陷。編譯器會如何處理這個聲明?

Data: T; // User-defined data attribute 

如果你不提供T,那麼編譯器不知道該怎麼辦。

這個觀察導致我們找到一種可能的方法。如果你不想提供T那麼可能你不希望這個類包含這個成員。如果它的類型不提供,它如何包含該成員?因此,定義一個非通用版本:

type 
    TVertex = class 
    public 
    Name: String; 
    OutputAttributes: TVertexOutputAttributes; 
    Marker: Boolean; 
    end; 

然後從這個派生通用版本:

type 
    TVertex<T> = class(TVertex) 
    public 
    Data: T; // User-defined data attribute 
    end; 

顯然,你需要確定在哪個類中的方法應該聲明和實現。顯然,任何不依賴於Data的方法都可以在非泛型類中實現。