[英]c# inheritance general then specific
class base_c
{
public virtual void a() {}
public virtual void b() {}
public virtual void c() {}
public virtual void d() {}
}
class other_c : base_c
{
public void a() {}
public new void b() {}
public override void c() {}
public override void d() {base.d();}
}
class Program
{
static void Main()
{
base_c game2 = new other_c();
game2.a();
game2.b();
game2.c();
game2.d();
}
}
'd'具有期望的行为,即更通用的base_c函数以及更具体的other_c出现,但是如果顺序相反则会很好。 若要查看此效果,请使用调试器并逐步执行该程序。
“ d”是实现此结果的最佳方法吗?
尽管在此示例中可以更改它,但“ base_c game2 = ...”必须保留为base_c,并且不能更改为other_c。
是的,如果您的意图是让子类扩展方法D中的继承行为,则模式是在子项d的替代中调用base.d()。
如果您打算替换继承的行为(而不是扩展),则不会调用基本方法。
您还可以选择是在覆盖方法中执行任何操作之前先调用base方法,还是在中间方法中或在覆盖方法中的代码之后调用base。
在适当的情况下,所有这些都是有效的技术。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.