Force the use of interface instead of concrete implementation in declaration (.NET)

Posted by gammelgul on Stack Overflow See other posts from Stack Overflow or by gammelgul
Published on 2010-05-05T11:15:09Z Indexed on 2010/05/05 11:18 UTC
Read the original article Hit count: 175

Filed under:
|
|
|
|

In C++, you can do the following:

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";
    }
};

The derived_class overrides the method do_something() and makes it private. The effect is, that the only way to call this method is like this:

base_class *object = new derived_class();
object->do_something();

If you declare the object as of type derived_class, you can't call the method because it's private:

derived_class *object = new derived_class();
object->do_something(); 
// --> error C2248: '::derived_class::do_something' : cannot access private member declared in class '::derived_class'  

I think this is quite nice, because if you create an abstract class that is used as an interface, you can make sure that nobody accidentally declares a field as the concrete type, but always uses the interface class.

Since in C# / .NET in general, you aren't allowed to narrow the access from public to private when overriding a method, is there a way to achieve a similar effect here?

© Stack Overflow or respective owner

Related posts about c#

Related posts about .NET