返回首页


我们都知道,在运行时可以检测到一个System.Object实例的实际类型。铸造(假设,我们不截断值),运行时所提供的原始数据类型是互相兼容。所以,如果我有一个int,它可以转换为long或ulong。所有这一切是好的。观看此:

interface IAppDataTypeBase

{

   // Other methods

   GetValue();

}

由于IAppDataTypeBase代表我的应用程序中的数据的所有类型的母亲,我的GetValue返回的值对象(我可以使用泛型,另一天!)。{C}
所以我们讨论任何问题?是的,我们。问题是,GetValue返回值 - 继承 - 尽管天生长期不能转换为int。它会导致一个"指定的转换无效"异常。如果一个对象的基本类型之一,它只能被转换为实际类型。在上述案例中,GetValue返回的对象只能投长,并没有别的。用户定义的数据类型没有这个限制,如果基类型和目标类型是相关的。
class X { };

class DX : X { };

class Y { };

如果的GetValue返回的DX的一个实例,它可以转换为X或任何其基接口(如有)。这同样为结构也很好。

那么,为什么我们有这个转换为原始类型的限制?是这样的无意或有一种先进的CLR内部网页的地方谈到这吗?可能是固定在C#4.0?直到我了解为什么,问题是开放的。

回答

评论会员:a 时间:2