小编gam*_*gul的帖子

强制使用接口而不是声明中的具体实现(.NET)

在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";
    }
};
Run Code Online (Sandbox Code Playgroud)

derived_class覆盖的方法do_something(),并使得它private.结果是,调用此方法的唯一方法是这样的:

base_class *object = new derived_class();
object->do_something();
Run Code Online (Sandbox Code Playgroud)

如果将对象声明为类型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'  
Run Code Online (Sandbox Code Playgroud)

我认为这很好,因为如果你创建一个用作接口的抽象类,你可以确保没有人意外地声明一个字段作为具体类型,但总是使用接口类.

由于在C#/.NET一般来说,你不能缩小从接入publicprivate重载的方法时,有没有办法在这里实现类似的效果?

.net c# c++ inheritance access-modifiers

6
推荐指数
1
解决办法
2100
查看次数

标签 统计

.net ×1

access-modifiers ×1

c# ×1

c++ ×1

inheritance ×1