2012-11-20 58 views
0

我想知道是否有一種方法可以傳入強制爲某種基本類型的類型。例如,對於我的遊戲引擎,我有一個屬性列表(可控,rigidBody等)。我有一個addAttribute參數,它需要一個新的對象。不過,我想也有一個重載類型,我可以從中創建一個新對象。因此,例如從某個抽象繼承的類型參數

public void addAttribut(Type attribute) 

我想也許是實現LINQ的東西?我已經試過,但它看起來像「其中」可仿製藥的前提下使用:

public void addAttribute(Type attribute) where attribute : Attribute 

將是函數的簽名。我相信Unity會這樣做;然而,它可能是它可以通過Mono來做到這一點。

我總是可以拋出一個異常,如果它不是正確的基類型。不過,我想知道是否有辦法阻止程序員在錯誤的時間一起傳遞。

任何想法?任何幫助是極大的讚賞!

回答

0

如果你感到快樂的調用代碼需要知道在編譯時的類型,你可以把一個通用的方法與一類參數:

public void AddAttribute<T>() where T : Attribute 
{ 
    // Use typeof(T) 
} 

或執行參數的構造函數然後您可以撥打:

public void AddAttribute<T>() where T : Attribute, new() 
{ 
    T t = new T(); 
    ... 
} 

但除此之外,有沒有做這件事的辦法,沒有 - 你必須確認在執行時的說法,就像任何其他。

+0

哈!現在完美的我記得Unity如何做到這一點(在相當長一段時間內沒有使用它) –

+0

對於任何尋找答案的人來說,這將一起工作你的函數public void addAttribute ()where T:Attribute,new ),因此你現在可以調用addAttribute(new T()); –

+0

@SergueiFedorov:您不清楚您是否想使用無參數構造函數創建實例;例如,您可能需要其他構造函數。我會編輯我的答案來澄清。 –