2012-02-20 42 views
0

是否存在「嚴格」約束或強制執行可以使用的類型的方法。是否有嚴格執行可以使用的類型的方法。 (Very Explict Casting)

S <: T 

喜歡的東西

Method(value As T) ' Any Type of T including subtypes of T 
Method(value Is T) ' Only take a T not a subtype of T 

我可以在運行時

If TypeOf value Is T Then 

做到這一點但是,這是一個運行時檢查,編譯時檢查會比較理想

Option Strict On 

這隻限制它(隱式)類型加寬Coerecions。

我想所有類型Coerecions必須明確。

可能嗎?如果是這樣如何?

+0

你在做什麼,子類型不能作爲基本類型的有效替代(通常違反[Liskov Substitution Principle](http://en.wikipedia.org/wiki/Liskov_substitution_principle))?您的方案可能適用於[訪問者]之類的模式(http://stackoverflow.com/questions/8828857/upcasting-helper-method/8830079#8830079)。 – 2012-02-20 15:43:01

回答

0

你的意思是這樣的:

private void Method<T>(T mytype) where T: MyClass 
{ 
} 

這是可能的解決方案

+1

仍然允許傳入MyClass的子類。 – 2012-02-20 15:47:21

+0

是的,這是第一部分問題的答案。您可以閱讀有關約束的更多信息:http://msdn.microsoft.com/en-us/library/d5x73970(v=vs.80).aspx – alexsuslin 2012-02-20 15:50:09

0

不作爲用戶類型的 - 你必須在你是否會接受派生類型沒有發言權。如果您是某種類型的所有者,則不能通過將您的課程標記爲sealed來允許派生類型。

這就是說,你的請求違背了一些OOD原則。如果這實際上是必要的,你可能想重新考慮你的設計。

相關問題