C# 多态又一示例

发表于:2016-11-11 10:40

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:千一网络    来源:51Testing软件测试网采编

#
DoNet
分享:
  第一个示例,很简单,大多数人都会答对,熟悉的人可以跳过这个示例。
public class B
{
private const string P = "千一网络";
public virtual string F1()
{
return P;
}
public string F2()
{
return P;
}
}
public class D : B
{
private const string P = "www.cftea.com";
public override string F1()
{
return P;
}
public new string F2()
{
return P;
}
}
B b = new D();
MessageBox.Show(b.F1()); // 
MessageBox.Show(b.F2()); // 
  第二个示例,如果我们将代码改动一下,其实结果也是一样的,这段代码大多数人也能做对。
public class B
{
public string P { get; set; }
public B()
{
P = "千一网络";
}
public virtual string F1()
{
return P;
}
public string F2()
{
return P;
}
}
public class D : B
{
public new string P { get; set; }
public D()
{
P = "www.cftea.com";
}
public override string F1()
{
return P;
}
public new string F2()
{
return P;
}
}
B b = new D();
MessageBox.Show(b.F1()); // 
MessageBox.Show(b.F2()); // 
  首先根据多态特性决定执行哪个类的方法,确定了是哪个类的方法,使用的是哪个类的属性/字段就一目了然了。
  有人说,我并没有调用 B 的构造函数呀,我调用的是 D 的构造函数,为什么 B 的构造函数也执行了?其实是因为调用派生类的构造函数时, 会自动调用基类的构造函数。
  那基类的构造函数先调用,还是派生类的构造函数先调用呢? 基类先调用。
  那如果基类没有构造函数呢?基类没有构造函数,实际上编译器为基类补一个空白的构造函数, 所以实际上基类没有构造函数等同于基类有空白的构造函数。
精选软件测试好文,快来阅读吧~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号