从类到其任何一个直接或间接基类的隐式转换

时间:2014-06-08 14:18:41

标签: c# oop polymorphism

这是MSDN关于隐式转换的想法。 隐式转换:不需要特殊语法,因为转换是类型安全的,不会丢失任何数据。示例包括从较小到较大整数类型的转换,以及从派生类到基类的转换。 但是我想知道如何从派生类到基类的转换是可能的,因为派生类有更多的成员而不是它的基类所以它更大,它对我来说没有任何意义可能吗?抱歉英语不好。

1 个答案:

答案 0 :(得分:3)

额外的成员仍在那里。没有数据丢失。您无法从基类型的变量访问它们。此行为是多态的属性。

当您隐式(或明确地)将Derived投射到Base时,您没有创建Base的新实例,或者更改Derived的现有实例,您只是为Derived创建一个不同的视图,将其视为,好像它是Base

要再次访问派生成员,您需要显式地转换回派生类型以访问它们。

假设Derived有字段FooBase没有:

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