2012-02-20 43 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原则。如果这实际上是必要的,你可能想重新考虑你的设计。

相关问题