这是MSDN关于隐式转换的想法。 隐式转换:不需要特殊语法,因为转换是类型安全的,不会丢失任何数据。示例包括从较小到较大整数类型的转换,以及从派生类到基类的转换。 但是我想知道如何从派生类到基类的转换是可能的,因为派生类有更多的成员而不是它的基类所以它更大,它对我来说没有任何意义可能吗?抱歉英语不好。
答案 0 :(得分:3)
额外的成员仍在那里。没有数据丢失。您无法从基类型的变量访问它们。此行为是多态的属性。
当您隐式(或明确地)将Derived
投射到Base
时,您没有创建Base
的新实例,或者更改Derived
的现有实例,您只是为Derived
创建一个不同的视图,将其视为,好像它是Base
。
要再次访问派生成员,您需要显式地转换回派生类型以访问它们。
假设Derived
有字段Foo
而Base
没有:
Derived d = new Derived();
Console.WriteLine(d.Foo);
Base b = d;
Console.WriteLine(b.Foo); //compile error
Derived d2 = (Derived)b; //or Derived d2 = b as Derived;
Console.WriteLine(d2.Foo); //valid