读书人

调基类的函数,该如何解决

发布时间: 2013-07-16 22:38:05 作者: rapoo

调基类的函数

    public class A
{
public virtual void Base()
{
Console.WriteLine("A");
}
}
public class B : A
{
public override void Base()
{
Console.WriteLine("B");
base.Base();
}
}
public class C : B
{
public override void Base()
{
Console.WriteLine("C");
base.Base();
}
}

当我NEW B时,调用函数Base
C c = new C();
c.Base();
怎么才能不调用类开的函数,得到如下结果.
Console.WriteLine("C");
Console.WriteLine("A");
[解决办法]
引用:
Console.WriteLine("C");
Console.WriteLine("A");


既然你要的结果是这个,为什么不 C:A?
[解决办法]
面向对象编程,是因为面向对象系统分析和设计方法原本就是这样规定的。而后者,是为了达到与实际领域知识相一致,让不懂编程的人也看得懂,可以理解。

继承是有设计意义的。不是为了你能够少些一两行Base()里边的代码的。如果你为了少写几行代码而用继承,这就是典型的“滥用继承”。你做出的设计在别的懂得面向对象分析设计的工程师看来,只能是不断爆出诡异的结果来。
[解决办法]
实现一个C->A的转换代码,然后直接去调用:

public class A
{
public virtual void Base()


{
Console.WriteLine("A");
}
}
public class B : A
{
public override void Base()
{
Console.WriteLine("B");
base.Base();
}
}
public class C : B
{
public override void Base()
{
Console.WriteLine("C");
ToA().Base();
}
private A ToA() { return new A() { xxx = this.xxx, ... }; }
}

读书人网 >C#

热点推荐