首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

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

2013-07-16 
调基类的函数public class A{public virtual void Base(){Console.WriteLine(A)}}public class B : A{p

调基类的函数

    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, ... }; }
    }

热点排行