接口 - I1(包含M1方法) 类-C1:I1(c1实现I1) Class-C2:C1(C2继承C1)
interface I1
{
void M1();
}
class C1 : I1
{
void M1(){}
}
class C2 : C1
{
}
要求: “C1”中不应该执行“M1”,基本上“M1”需要在“C2”中实现
如何使用任何OOP概念实现这一目标?
答案 0 :(得分:9)
只要你能够容忍C1是抽象的,这就有效:
interface I1
{
void M1();
}
abstract class C1 : I1
{
public abstract void M1();
}
class C2 : C1
{
public override void M1()
{
//
}
}
编辑:正如评论中提到的Isantipov,您可以避免像这样的抽象类:
class C1 : I1
{
public virtual void M1()
{
throw new NotSupportedException();
}
}
答案 1 :(得分:5)
使C1
抽象化并将M1
定义为抽象方法。
答案 2 :(得分:2)
您正在寻找抽象method[wiki]:
抽象方法是只有签名而没有实现的方法 身体。它通常用于指定子类必须提供 该方法的实施。抽象方法用于指定 某些计算机语言的接口。
抽象方法声明引入了一个新的虚方法 没有提供该方法的实现。代替, 非抽象派生类需要提供自己的派生类 通过覆盖该方法实现。因为抽象的方法 没有提供实际的实现,抽象的方法体 方法只需一个分号。
在你的情况下:
interface I1
{
void M1();
}
abstract class C1 : I1
{
public abstract void M1();
}
class C2 : C1
{
public override void M1()
{
// Your code here
}
}
答案 3 :(得分:1)
您可以使C1抽象,也可以使用显式实现。这意味着它已实现,但不可见。
class C1 : I1
{
void I1.M1(){ throw new NotImplementedException(); }
}
这样称呼是无效的:
C1 c1 = new C1();
c1.M1(); //Error
答案 4 :(得分:0)
另一种答案 你可以有多个接口。 .NET Fiddle
interface I1
{
void someCommonMethod();
}
interface I2
{
void M1();
}
然后你的类可以像这样继承。
class C1 : I1
{
public void someCommonMethod()
{
...
}
}
class C2 : C1, I2
{
public void M1()
{
...
}
}