In C++, è possibile effettuare le seguenti operazioni:forzare l'uso dell'interfaccia al posto di concreta attuazione nella dichiarazione (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";
}
};
Il derived_class
l'override del metodo do_something()
e rende private
. L'effetto è, che l'unico modo per chiamare questo metodo è simile a questo:
base_class *object = new derived_class();
object->do_something();
Se si dichiara l'oggetto come di tipo derived_class
, non è possibile chiamare il metodo, perché è privato:
derived_class *object = new derived_class();
object->do_something();
// --> error C2248: '::derived_class::do_something' : cannot access private member declared in class '::derived_class'
Penso che sia abbastanza carino, perché se si crea una classe astratta che viene utilizzata come interfaccia, è possibile assicurarsi che nessuno dichiari accidentalmente un campo come tipo concreto, ma utilizzi sempre la classe di interfaccia.
Poiché in C#/.NET in generale, non è consentito limitare l'accesso da public
a private
quando si sostituisce un metodo, esiste un modo per ottenere un effetto simile qui?
Questo effetto è ciò che voglio, grazie. – gammelgul
+1 Ho appena imparato qualcosa di nuovo! – BritishDeveloper
+1 Grazie per questo, ho anche imparato qualcosa di nuovo! – Deano