昨天我询问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'的私有成员变量? –
您可以使用受保护的方法。 –