昨天我詢問this question,但我認爲目前還不清楚我主要關心的是什麼。在C++中,我們擁有私有繼承和多重繼承,這使我們可以通過繼承聲明這些方法的類來爲類添加私有方法。也就是說,如果有一類在C#中通過繼承向類中添加私有方法
class B {
public:
virtual void doMethodB();
};
和一類
class A : private B {
virtual int doMethodA();
};
doMethodB()
可以從doMethodA()
中被調用,而不是從外部訪問。
現在,我想在C#中模仿這種行爲。沒有多重或私人繼承。就知道了,我能想到的四種方式來實現類似的財產以後,但仍然有嚴重的缺陷:
首先:使用interface
,即
interface IB {
public void doMethodB();
};
class A : IB {
public void doMethodB();
int doMethodA();
};
然而,我們這樣做的時候,doMethodB()
是public
,並且必須執行每個類繼承IB
。
二:使用一個靜態方法
public static class B {
public static void doMethodB();
};
這樣一來,有僅需要一個實現,但該方法仍是公衆,不能侷限於某些類別。
第三:使用擴展方法,如that。然而,該方法在對象(即a.doMethodB()
)上而不是從「內部」上被稱爲。
第四:構圖。
class A {
private B b;
public int doMethodA();
};
現在,B
的方法可以被稱爲像b.doMethodB()
只從A
,但其他的問題現在就係列化,b == null
等
難道還有其他選擇嗎?如果不是,你會考慮哪一個是「最好」?
由於私有繼承基本上是遏制,爲什麼不簡單地擁有'B'的私有成員變量? –
您可以使用受保護的方法。 –