我的意思是如何约束这三种实现类,都必须完成这个函数。我在VS2012中,本意是想使用继承的,结果C类继承了B类,B类的该函数使用的是虚函数,但C类编绎的时候没有实现那个函数,就通过了。

解决方案 »

  1.   

    除了接口,还可以用抽象方法    abstract class B 
        {
            public abstract void Method();
        }
        class C : B 
        { 
            public override void Method() 
            { } 
        }
      

  2.   

    接口派生一个类后,该类必须完全实现接口的方法。在该类的派生类中就无法约束派生类是否重写父类的方法了。
    既然需要C类去继承B类,那么肯定是C类有自己的一些特点或是扩展。为什么要考虑必须重写B类的方法呢?
      

  3.   


    我的意思是如何约束这三种实现类,都必须完成这个函数。我在VS2012中,本意是想使用继承的,结果C类继承了B类,B类的该函数使用的是虚函数,但C类编绎的时候没有实现那个函数,就通过了。
    B继承A,B可以不实现A中的任何函数,B中可以什么都没有.
    接口和继承的概念,你搞混了...
      

  4.   


    我的意思是如何约束这三种实现类,都必须完成这个函数。我在VS2012中,本意是想使用继承的,结果C类继承了B类,B类的该函数使用的是虚函数,但C类编绎的时候没有实现那个函数,就通过了。虚方法,子类可以不用重写,不重写就用父类的那个方法,重写就用子类的方法,编译不会报错。
    没法怎么约束,因为基类B已经实现那个方法的话,后面继承的就用基类方法。
      

  5.   


    我的意思是如何约束这三种实现类,都必须完成这个函数。我在VS2012中,本意是想使用继承的,结果C类继承了B类,B类的该函数使用的是虚函数,但C类编绎的时候没有实现那个函数,就通过了。虚方法,子类可以不用重写,不重写就用父类的那个方法,重写就用子类的方法,编译不会报错。
    没法怎么约束,因为基类B已经实现那个方法的话,后面继承的就用基类方法。B是派生类,在B这个派生类中,加一个抽象方法,但继承B的C,仍然没有约束。我在VS2012中,确实不重写也是可以通过的。
      

  6.   


    B不是抽象类,B是派生类,A是抽象类,B对A的一些函数进行了实现,但其中一部分函数必须还要分多种情况考虑,所以想到使用C继承B,但B中写的抽象方法,在C中是可以不重写也会被编绎通过的。
      

  7.   


    我的意思是如何约束这三种实现类,都必须完成这个函数。我在VS2012中,本意是想使用继承的,结果C类继承了B类,B类的该函数使用的是虚函数,但C类编绎的时候没有实现那个函数,就通过了。虚方法,子类可以不用重写,不重写就用父类的那个方法,重写就用子类的方法,编译不会报错。
    没法怎么约束,因为基类B已经实现那个方法的话,后面继承的就用基类方法。B是派生类,在B这个派生类中,加一个抽象方法,但继承B的C,仍然没有约束。我在VS2012中,确实不重写也是可以通过的。你要明白什么是抽象方法什么是虚方法。看你一会说这个一会说那个。
    虚方法,子类可以不重写,抽象方法,子类如果是抽象类,可以不重写,非抽象类就必须重写。
      

  8.   


    凭这个理由,根本谈不上应该继承。你就定义C,并且在C的函数中调用B(或者B的实例)的函数即可避免额外编写代码。
      

  9.   


    凭这个理由,根本谈不上应该继承。你就定义C,并且在C的函数中调用B(或者B的实例)的函数即可避免额外编写代码。不是代码,大哥,我是要约束C类必须去实现B类中的方法。怎么约束?
      

  10.   


    我的意思是如何约束这三种实现类,都必须完成这个函数。我在VS2012中,本意是想使用继承的,结果C类继承了B类,B类的该函数使用的是虚函数,但C类编绎的时候没有实现那个函数,就通过了。虚方法,子类可以不用重写,不重写就用父类的那个方法,重写就用子类的方法,编译不会报错。
    没法怎么约束,因为基类B已经实现那个方法的话,后面继承的就用基类方法。B是派生类,在B这个派生类中,加一个抽象方法,但继承B的C,仍然没有约束。我在VS2012中,确实不重写也是可以通过的。你要明白什么是抽象方法什么是虚方法。看你一会说这个一会说那个。
    虚方法,子类可以不重写,抽象方法,子类如果是抽象类,可以不重写,非抽象类就必须重写。你说的我明白,抽象方法必须重写。我想问的是如何做才能让C必须实现B这个派生类的某个函数,而不是没有任何约束。
      

  11.   

    不管是C继承了B还是C引用了B,你都不应该去管C内部实现的时候到底有没有实现B的方法
    甚至C引用了B但是根本就没用B中的任何属性和方法,也是被允许的.
    我工程中引用了大量的DLL,有些是以前工程COPY过来现在没用了的,我又懒得去挨个删除,难道我就必须把DLL中每个方法都用一用才行?怎么可能呢.
      

  12.   

    interface IA
        {
            void test();
        }
        
        public abstract class B : IA
        {
            public void test()
            {        }        public abstract void test2();
        }    class C: B
        {
            public override void test2()
            {        }
        }这样才能编译通过。
      

  13.   

    public abstract class A
        {
            public abstract int MyA { get; set; }
            //...
        }    public abstract class B : A
        {
            public override int MyA { get; set; }        public abstract void ExtentB()
            {
                //...
            }
        }    public class C : B
        {
            public override void ExtentB()
            {
                //
            }
        }
      

  14.   

    A B C有继承关系, B:A, C:B, 如果定义接口IB 让B和C去继承这个接口C就不需要强制实现IB了,也无法满足你的需求,个人觉得你还是把B改称抽象吧,这样才能符合你的需求