C#中基类与派生之间的转型问题!

来源:百度知道 编辑:UC知道 时间:2024/06/04 16:34:56
Son son=new Son();
Father fa=son;
派生类实例转型到父类实例会丢失派生类的扩展成员吗?

我在C#本质论里看到一句话是这么说的:
CD是一种存储设备.由于并非所有存储设备都支持弹出操作,因此CD在转型为存储设备后,就不能再支持弹出.
可我在<大话设计模式>的装饰模式里看到那个代码如果子类到父类的转型会丢失子类的扩展的话,那个装饰模式根本就是错的了!
怎么回事啊?
static void Main(string[] args)
{
Person xc=new Person("小菜");
Console.WriteLine("\n第一种装扮:");

Sneakers pqx=new Sneakers();
BigTrouser kk=new BigTrouser();
TShirts dtx=new TShirts();

pqx.Decorate(xc);
kk.Decorate(pqx);
dtx.Decorate(kk);
dtx.Show();

Console.WriteLine("\n第二种装扮:");

LeatherShoes px=new LeatherShoes();
Tie ld=new Tie();
Suit xz=new Suit();

px.Decorate(xc);
ld.Decorate(px);
xz.Decorate(ld);
xz.Show();

Console.Read();
}

如果直接引用fa的话是不能进行使用“扩展”成员的,但可以把fa再强制cast成子类后调用“扩展”成员。
(father是父类,son是子类,我这样理解的)
------------
数据不会丢失,我不太理解你这里的丢失指的是丢失什么?成员信息还是成员数据还是其他什么?

fa还是father类对象,只不过实例化啦一个son类 ,不能son=new Father();

CD和CD光驱两码事

到底想说什么?还是展示你在学什么