父类如何访问子类属性?
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"?
解决方案 »
- ===求教SQLserver数据库用户定义函数的日期比较问题
- XP上的IIS5.0上架设.NET2.0
- 为什么代码中Calendar1_DayRender没有执行,用断点监视了,没有经过那块语句?!
- 用firefox打开图片连接是乱码,但是IE是好的,太奇怪了,谢谢大家!
- 如何将带有表格或图像的word文档转换为html
- DATAgrid的header里面的内容要怎么改变?
- 如何处理Media Player事件问题?
- 应用程序中的服务器错误
- 各位大哥帮忙进来看看,选择文件路径的问题,急!在线等!
- 学asp.net要什么样的水平才能出去到工作?
- 哪位能给一个在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对象?