父类如何访问子类属性?

lsd123 2009-01-07 05:00:19
父类如何访问子类属性?


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"?
...全文
584 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
lsd123 2009-01-12
  • 打赏
  • 举报
回复
谢谢
deepinnet 2009-01-08
  • 打赏
  • 举报
回复
同一个东西 换个马甲就不认识了?在内存就一个对象
ReyZhang 2009-01-08
  • 打赏
  • 举报
回复
也来揍热闹,建议lz还是多看一些oo方面的书,封装,继承,多态要先理解了
lsd123 2009-01-08
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 vrhero 的回复:]
public Supclass Father//但这里返回的是Supclass 对象
-------
这里返回的是Supclass类型的Subclass对象...好好看书...
[/Quote]

Supclass类型的Subclass对象?
zerostyle 2009-01-07
  • 打赏
  • 举报
回复
private Subclass Son =new Subclass();
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子类中的哪个类型,说的多了,有些没用的。
HDNGO 2009-01-07
  • 打赏
  • 举报
回复
里氏替换原则LSP

子类应当可以替换父类并出现在父类能够出现的任何地方,或者说如果我们把代码中使用基类的地方用它的子类所代替,代码还能正常工作。

- 类的继承原则:如果一个继承类的对象可能会在基类出现的地方出现运行错误,则该子类不应该从该基类继承,或者说,应该重新设计它们之间的关系。
king19840811 2009-01-07
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 vrhero 的回复:]
public Supclass Father//但这里返回的是Supclass 对象
-------
这里返回的是Supclass类型的Subclass对象...好好看书...
[/Quote]
继续支持
clever_yang 2009-01-07
  • 打赏
  • 举报
回复
试着想一下,如果子类继承了父类的属性,父类又可以访问子类的属性...这样会乱套的....
就象在MVC里面 BLL层调用DAL层的信息,DAL又可以访问BLL层的话.. 就不满足松散藕荷的原则了....
lsd123 2009-01-07
  • 打赏
  • 举报
回复
谢谢
HDNGO 2009-01-07
  • 打赏
  • 举报
回复
依赖倒置原则的2个重要方针:

A. High level modules should not depend upon low level modules. Both should depend upon abstractions.
B. Abstractions should not depend upon details. Details should depend upon abstractions.
中文意思为:
A. 高层模块不应该依赖于低层模块,二者都应该依赖于抽象
B. 抽象不应该依赖于细节,细节应该依赖于抽象
vrhero 2009-01-07
  • 打赏
  • 举报
回复
public Supclass Father//但这里返回的是Supclass 对象
-------
这里返回的是Supclass类型的Subclass对象...好好看书...
lsd123 2009-01-07
  • 打赏
  • 举报
回复
public Supclass Father//但这里返回的是Supclass 对象
{
get { return Son; }//返回的是Subclass对象
}
HDNGO 2009-01-07
  • 打赏
  • 举报
回复
继承关系。。

多态了~
stning 2009-01-07
  • 打赏
  • 举报
回复

Subclass Son1=(Subclass)Father;

为什么还能得到Son1.Name="Test"?
为什么不行,本来就是子类的引用。
king19840811 2009-01-07
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 vrhero 的回复:]
private Subclass Son =new Subclass();//声明的是Subclass类型
Son.Name="Test";

public Supclass Father
{
get { return Son; }//返回的是Subclass对象
}

Subclass Son1=(Subclass)Father;

Subclass Son1=(Subclass)Father;//声明的是Subclass类型

Son1是Subclass类型当然能访问Name属性...跟“父类访问子类属性”没任何关系...

而且根据依赖倒置原则,父类不可以访问子类属性...
[/Quote]

支持
jimu8130 2009-01-07
  • 打赏
  • 举报
回复
http://www.cnblogs.com/anytao/archive/2007/09/10/must_net_15.html
如果你想弄明白,请认真研读这里这篇好文章
vrhero 2009-01-07
  • 打赏
  • 举报
回复
private Subclass Son =new Subclass();//声明的是Subclass类型
Son.Name="Test";

public Supclass Father
{
get { return Son; }//返回的是Subclass对象
}

Subclass Son1=(Subclass)Father;

Subclass Son1=(Subclass)Father;//声明的是Subclass类型

Son1是Subclass类型当然能访问Name属性...跟“父类访问子类属性”没任何关系...

而且根据依赖倒置原则,父类不可以访问子类属性...
king19840811 2009-01-07
  • 打赏
  • 举报
回复
多态性

62,072

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧