2009-08-21 64 views
1

這是用C#和.NET 3.5接受一組有限的亞型的方法參數

比方說,我有以下方法:

myMethod(myBaseClass mbc) 

在我的項目,下面所有的類繼承myBaseClass。

ot1:myBaseClass 
ot2:myBaseClass 
ot3:myBaseClass 
ot4:myBaseClass 

是否存在,這將讓我使用myMethod的與OT1及OT3,但任何技巧不OT2和OT-4,還是我基本上都超載每種類型我想允許?

回答

5

一個接口。將您的方法簽名更改爲

myMethod(ICastableAsMyBaseClass mbc) 

然後讓ot1和ot3執行ICastableAsMyBaseClass

+1

這不會阻止不從MyBaseClass派生的類實現接口。 他可以這樣通用: myMethod (T mbc)其中T:MyBaseClass,ICastableAsMyBaseClass – Botz3000 2009-08-21 23:49:28

+0

這不是一個壞主意。 – Joel 2009-08-22 01:40:26

2

您可以在運行時檢查mbc的類,但顯然這並不妨礙您在編譯時錯誤地調用該方法。

如果你想編譯時類型檢查,你需要重載你想要允許的每種類型的方法。

+0

有了這個特殊的解決方案,您可以將兩個構造函數委託給一個採用基類型的私有構造函數。現在你可以獲得編譯時的安全性,而且不必複製構造函數。 – 2009-08-22 00:59:49