【发布时间】:2011-02-15 21:20:06
【问题描述】:
在 C++ 中,您可以执行以下操作:
class base_class
{
public:
virtual void do_something() = 0;
};
class derived_class : public base_class
{
private:
virtual void do_something()
{
std::cout << "do_something() called";
}
};
derived_class 覆盖方法do_something() 并使其成为private。效果是,调用这个方法的唯一方法是这样的:
base_class *object = new derived_class();
object->do_something();
如果将对象声明为derived_class 类型,则不能调用该方法,因为它是私有的:
derived_class *object = new derived_class();
object->do_something();
// --> error C2248: '::derived_class::do_something' : cannot access private member declared in class '::derived_class'
我认为这很好,因为如果你创建一个抽象类用作接口,你可以确保没有人不小心将一个字段声明为具体类型,而是始终使用接口类。
由于通常在 C#/.NET 中,在覆盖方法时不允许将访问范围从 public 缩小到 private,有没有办法在这里实现类似的效果?
【问题讨论】:
标签: c# .net c++ inheritance access-modifiers