這是用C#和.NET 3.5接受一組有限的亞型的方法參數
比方說,我有以下方法:
myMethod(myBaseClass mbc)
在我的項目,下面所有的類繼承myBaseClass。
ot1:myBaseClass
ot2:myBaseClass
ot3:myBaseClass
ot4:myBaseClass
是否存在,這將讓我使用myMethod的與OT1及OT3,但任何技巧不OT2和OT-4,還是我基本上都超載每種類型我想允許?
這是用C#和.NET 3.5接受一組有限的亞型的方法參數
比方說,我有以下方法:
myMethod(myBaseClass mbc)
在我的項目,下面所有的類繼承myBaseClass。
ot1:myBaseClass
ot2:myBaseClass
ot3:myBaseClass
ot4:myBaseClass
是否存在,這將讓我使用myMethod的與OT1及OT3,但任何技巧不OT2和OT-4,還是我基本上都超載每種類型我想允許?
一個接口。將您的方法簽名更改爲
myMethod(ICastableAsMyBaseClass mbc)
然後讓ot1和ot3執行ICastableAsMyBaseClass
。
您可以在運行時檢查mbc的類,但顯然這並不妨礙您在編譯時錯誤地調用該方法。
如果你想編譯時類型檢查,你需要重載你想要允許的每種類型的方法。
有了這個特殊的解決方案,您可以將兩個構造函數委託給一個採用基類型的私有構造函數。現在你可以獲得編譯時的安全性,而且不必複製構造函數。 – 2009-08-22 00:59:49
這不會阻止不從MyBaseClass派生的類實現接口。 他可以這樣通用: myMethod(T mbc)其中T:MyBaseClass,ICastableAsMyBaseClass –
Botz3000
2009-08-21 23:49:28
這不是一個壞主意。 – Joel 2009-08-22 01:40:26