В C++, вы можете сделать следующее:Принудительно использовать интерфейс вместо конкретной реализации в декларации (.NET)
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
при переопределении метода, существует ли способ достижения подобного эффекта здесь?
Этот эффект - это то, что я хочу, спасибо. – gammelgul
+1 Я только что узнал что-то новое! – BritishDeveloper
+1 Спасибо за это, также узнали что-то новое! – Deano