[英]How to Skip implementation of interface in class
接口 - I1(包含M1方法)类 - C1:I1(c1实现I1)类 - C2:C1(C2继承C1)
interface I1
{
void M1();
}
class C1 : I1
{
void M1(){}
}
class C2 : C1
{
}
要求: “C1”中不应该有“M1”的实现 ,基本上“M1”需要在“C2”中实现
如何使用任何OOP概念实现这一目标?
只要你能够容忍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();
}
}
使C1
抽象化并将M1
定义为抽象方法。
您正在寻找抽象方法[wiki] :
抽象方法是只有签名而没有实现主体的方法。 它通常用于指定子类必须提供方法的实现。 抽象方法用于指定某些计算机语言中的接口。
C#中的抽象方法 :
抽象方法声明引入了一个新的虚方法,但没有提供该方法的实现。 相反,非抽象派生类需要通过覆盖该方法来提供自己的实现。 因为抽象方法没有提供实际的实现,所以抽象方法的方法体只包含一个分号。
在你的情况下:
interface I1
{
void M1();
}
abstract class C1 : I1
{
public abstract void M1();
}
class C2 : C1
{
public override void M1()
{
// Your code here
}
}
您可以使C1抽象,也可以使用显式实现。 这意味着它已实现,但它不可见。
class C1 : I1
{
void I1.M1(){ throw new NotImplementedException(); }
}
这样调用它是无效的:
C1 c1 = new C1();
c1.M1(); //Error
另一种答案。
你可以有多个接口。 .NET小提琴
interface I1
{
void someCommonMethod();
}
interface I2
{
void M1();
}
然后你的类可以像这样继承。
class C1 : I1
{
public void someCommonMethod()
{
...
}
}
class C2 : C1, I2
{
public void M1()
{
...
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.