2010-11-25 35 views
6

Je me demandais pourquoi C# ne permet pas private virtual fonctions et a couru à travers le bien nommé Why are private virtual methods illegal in C#?Est-ce que privé signifie différentes choses en C++ et C#?

Dans la réponse acceptée Eric Lippert (qui sait sans doute ce qu'il parle ...) a dit:

Si vous souhaitez limiter la possibilité de remplacer la méthode dans les classes dérivées non imbriquées, vous pouvez le faire en limitant la capacité des classes non imbriquées à dériver de la classe de base;

En C++ private: virtual est logique, car cela signifie « Je veux les classes dérivées de moi pour passer outre la fonctionnalité de cette fonction, mais ils ne devraient pas être en mesure d'appeler directement », autrement dit private contrôles qui peuvent appeler une fonction et n'a aucun effet sur qui peut l'ignorer.

Je me rends compte que depuis que les classes dérivées peuvent remplacer en premier lieu et comme C# interdit private virtual fonctions cette question peut être dénuée de sens, y at-il d'autres scénarios dans lesquels le niveau de protection d'une fonction peut avoir un effet qui peut la remplacer (protected internal peut-être)?

Répondre

7

Il semble que vous souhaitiez que le monde C++ soit capable de remplacer mais pas d'appeler; alors non: vous ne pouvez pas faire ça en C#. Le inverse est très bien, bien que - soit ne marque pas virtual en premier lieu, ou le marquer sealed si elle est déjà virtual.