public abstract class B : IA { public void test() { } public abstract void test2(); } class C: B { public override void test2() { } }这样才能编译通过。
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() { // } }
A B C有继承关系, B:A, C:B, 如果定义接口IB 让B和C去继承这个接口C就不需要强制实现IB了,也无法满足你的需求,个人觉得你还是把B改称抽象吧,这样才能符合你的需求
{
public abstract void Method();
}
class C : B
{
public override void Method()
{ }
}
既然需要C类去继承B类,那么肯定是C类有自己的一些特点或是扩展。为什么要考虑必须重写B类的方法呢?
我的意思是如何约束这三种实现类,都必须完成这个函数。我在VS2012中,本意是想使用继承的,结果C类继承了B类,B类的该函数使用的是虚函数,但C类编绎的时候没有实现那个函数,就通过了。
B继承A,B可以不实现A中的任何函数,B中可以什么都没有.
接口和继承的概念,你搞混了...
我的意思是如何约束这三种实现类,都必须完成这个函数。我在VS2012中,本意是想使用继承的,结果C类继承了B类,B类的该函数使用的是虚函数,但C类编绎的时候没有实现那个函数,就通过了。虚方法,子类可以不用重写,不重写就用父类的那个方法,重写就用子类的方法,编译不会报错。
没法怎么约束,因为基类B已经实现那个方法的话,后面继承的就用基类方法。
我的意思是如何约束这三种实现类,都必须完成这个函数。我在VS2012中,本意是想使用继承的,结果C类继承了B类,B类的该函数使用的是虚函数,但C类编绎的时候没有实现那个函数,就通过了。虚方法,子类可以不用重写,不重写就用父类的那个方法,重写就用子类的方法,编译不会报错。
没法怎么约束,因为基类B已经实现那个方法的话,后面继承的就用基类方法。B是派生类,在B这个派生类中,加一个抽象方法,但继承B的C,仍然没有约束。我在VS2012中,确实不重写也是可以通过的。
B不是抽象类,B是派生类,A是抽象类,B对A的一些函数进行了实现,但其中一部分函数必须还要分多种情况考虑,所以想到使用C继承B,但B中写的抽象方法,在C中是可以不重写也会被编绎通过的。
我的意思是如何约束这三种实现类,都必须完成这个函数。我在VS2012中,本意是想使用继承的,结果C类继承了B类,B类的该函数使用的是虚函数,但C类编绎的时候没有实现那个函数,就通过了。虚方法,子类可以不用重写,不重写就用父类的那个方法,重写就用子类的方法,编译不会报错。
没法怎么约束,因为基类B已经实现那个方法的话,后面继承的就用基类方法。B是派生类,在B这个派生类中,加一个抽象方法,但继承B的C,仍然没有约束。我在VS2012中,确实不重写也是可以通过的。你要明白什么是抽象方法什么是虚方法。看你一会说这个一会说那个。
虚方法,子类可以不重写,抽象方法,子类如果是抽象类,可以不重写,非抽象类就必须重写。
凭这个理由,根本谈不上应该继承。你就定义C,并且在C的函数中调用B(或者B的实例)的函数即可避免额外编写代码。
凭这个理由,根本谈不上应该继承。你就定义C,并且在C的函数中调用B(或者B的实例)的函数即可避免额外编写代码。不是代码,大哥,我是要约束C类必须去实现B类中的方法。怎么约束?
我的意思是如何约束这三种实现类,都必须完成这个函数。我在VS2012中,本意是想使用继承的,结果C类继承了B类,B类的该函数使用的是虚函数,但C类编绎的时候没有实现那个函数,就通过了。虚方法,子类可以不用重写,不重写就用父类的那个方法,重写就用子类的方法,编译不会报错。
没法怎么约束,因为基类B已经实现那个方法的话,后面继承的就用基类方法。B是派生类,在B这个派生类中,加一个抽象方法,但继承B的C,仍然没有约束。我在VS2012中,确实不重写也是可以通过的。你要明白什么是抽象方法什么是虚方法。看你一会说这个一会说那个。
虚方法,子类可以不重写,抽象方法,子类如果是抽象类,可以不重写,非抽象类就必须重写。你说的我明白,抽象方法必须重写。我想问的是如何做才能让C必须实现B这个派生类的某个函数,而不是没有任何约束。
甚至C引用了B但是根本就没用B中的任何属性和方法,也是被允许的.
我工程中引用了大量的DLL,有些是以前工程COPY过来现在没用了的,我又懒得去挨个删除,难道我就必须把DLL中每个方法都用一用才行?怎么可能呢.
{
void test();
}
public abstract class B : IA
{
public void test()
{ } public abstract void test2();
} class C: B
{
public override void test2()
{ }
}这样才能编译通过。
{
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()
{
//
}
}