父类如何访问子类属性?
public class Supclass
{
public int ID{ get; set; }
}public class Subclass : Supclass
{
public string Name{ get; set; }
}
private Subclass Son =new Subclass();
Son.Name="Test";public Supclass Father
{
get { return Son; }
}Subclass Son1=(Subclass)Father;为什么还能得到Son1.Name="Test"?
public class Supclass
{
public int ID{ get; set; }
}public class Subclass : Supclass
{
public string Name{ get; set; }
}
private Subclass Son =new Subclass();
Son.Name="Test";public Supclass Father
{
get { return Son; }
}Subclass Son1=(Subclass)Father;为什么还能得到Son1.Name="Test"?
解决方案 »
- 求助:在做一个软件自动升级 遇到了这样的问题webReq.GetResponse(); 远程服务器返回错误: (404) 未找到!
- asp.net 如何绘制矩形
- 大家在用vs的时候,还用dreamweaver吗?
- Gridview的问题
- IIS6.0下发布asp.net不能访问
- 怎样将.cs文件编译成dll?
- comparevalidator控件如何判断数据类型是否相同的代码????
- 求asp.net web开发文档(解决方案文档)
- 请问怎样获取DataSet中某行某列的数据?(初学ASP.NET+VB)
- 如何将数据库"序列值"显示出来:
- 哪位能给一个在asp.net中mschart.ocx的使用例子
- 求助:VS2005,控件移动反映慢,抖啊抖的
Son.Name="Test";public Supclass Father
{
get { return Son; }//返回的是Subclass对象
}Subclass Son1=(Subclass)Father;Subclass Son1=(Subclass)Father;//声明的是Subclass类型Son1是Subclass类型当然能访问Name属性...跟“父类访问子类属性”没任何关系...而且根据依赖倒置原则,父类不可以访问子类属性...
如果你想弄明白,请认真研读这里这篇好文章
Subclass Son1=(Subclass)Father;为什么还能得到Son1.Name="Test"?为什么不行,本来就是子类的引用。
{
get { return Son; }//返回的是Subclass对象
}
-------
这里返回的是Supclass类型的Subclass对象...好好看书...
B. Abstractions should not depend upon details. Details should depend upon abstractions.
中文意思为:
A. 高层模块不应该依赖于低层模块,二者都应该依赖于抽象
B. 抽象不应该依赖于细节,细节应该依赖于抽象
就象在MVC里面 BLL层调用DAL层的信息,DAL又可以访问BLL层的话.. 就不满足松散藕荷的原则了....
Son.Name="Test";public Supclass Father
{
get { return Son; }//这里返回的是子类型!!!!
}Subclass Son1=(Subclass)Father;
你看看你这里写的,你定义的是Subclass,他的Father是他的基类Supclass,你在后面又把基类型Supclass对象转换成Subclass,他就是一个Subclass类型,Subclass类当然有Name属性!,并且你在get的时候返回来的是个Subclass 类型,虽然你定义的返回是Supclass 类型,但是Subclass 是Supclass 的子类,他包含了父类的元素
当你有三层继承的时候,你就知道这个public Supclass Father的好处了,因为你并不确定他能返回Supclass子类中的哪个类型,说的多了,有些没用的。
Supclass类型的Subclass对象?