接口 - I1(包含M1方法) 類 - C1:I1(C1實現I1) 類 - C2:C1(C2繼承C1)如何跳過執行接口的類
interface I1
{
void M1();
}
class C1 : I1
{
void M1(){}
}
class C2 : C1
{
}
要求: 不應該有「M1」中的「C1」的任何實現,基本上是「M1」需要「C2」中實現
如何使用任何的OOPS概念實現這一目標?
接口 - I1(包含M1方法) 類 - C1:I1(C1實現I1) 類 - C2:C1(C2繼承C1)如何跳過執行接口的類
interface I1
{
void M1();
}
class C1 : I1
{
void M1(){}
}
class C2 : C1
{
}
要求: 不應該有「M1」中的「C1」的任何實現,基本上是「M1」需要「C2」中實現
如何使用任何的OOPS概念實現這一目標?
將C1
作爲抽象方法抽象並定義爲M1
。
您正在尋找抽象method[wiki]:
一種抽象方法,是一個只有簽名,沒有執行 體。它通常用於指定子類必須提供方法的實現。抽象方法用於在某些計算機語言中指定接口。
抽象方法聲明引入一個新的虛擬方法,但 不提供該方法的實現。相反, 非抽象派生類需要通過重寫該方法來提供自己的 實現。因爲抽象方法 沒有提供實際的實現,所以抽象方法的主體只包含一個分號。
你的情況:
interface I1
{
void M1();
}
abstract class C1 : I1
{
public abstract void M1();
}
class C2 : C1
{
public override void M1()
{
// Your code here
}
}
只要你能忍受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();
}
}
替代答案。
您可以有多個接口。 .NET Fiddle
interface I1
{
void someCommonMethod();
}
interface I2
{
void M1();
}
然後你的類可以像這樣繼承。
class C1 : I1
{
public void someCommonMethod()
{
...
}
}
class C2 : C1, I2
{
public void M1()
{
...
}
}
您可以使C1抽象或您可以使用顯式實現。這意味着它已經實現,但它不可見。
class C1 : I1
{
void I1.M1(){ throw new NotImplementedException(); }
}
是無效的。這樣稱呼它:
C1 c1 = new C1();
c1.M1(); //Error
我加你的第一線的輪廓更易於理解(IMO),請隨時修改或恢復,如果你不相信這是可以接受的 – Sayse