【发布时间】:2017-07-13 10:26:57
【问题描述】:
所以我对自定义类型如何在 .NET Framework 中存储数据没有深入的了解,但我正在寻找有关转换系统如何工作的解释。
例如,如果要将像 Char 这样的 ValueType 结构显式转换为 Byte,如下所示:
char C = '#';
byte B = (byte)C;
Console.WriteLine(B.GetType()); // Outputs "Byte"
我会被告知 B 是一个字节,这是完全有道理的。
现在假设我从自定义类 Flower 转换为其基类 Plant,为什么输出显示派生类而不管转换如下:
class Plant{}
class Flower:Plant{}
.
Flower Rose = new Flower();
Plant RoseBush = (Plant)Rose;
Console.WriteLine(RoseBush.GetType()); //Outputs Flower
Plant Rose = new Flower();
Plant RoseBush = (Plant)Rose;
Console.WriteLine(RoseBush.GetType()); //Outputs Flower as well
我想我的问题是,为什么类型不暴露自定义类型的当前类型,即 Plant,为什么这与一开始的 Value Types 不同?
另外,为什么花和植物的两个例子,虽然第一行写法不同,却输出相同的东西?
【问题讨论】: