7
votes

Puis-je faire une classe scellée en interne mais scellée à l'extérieur?

en C # est-il possible de faire une classe qui peut être dérivée de manière interne (non sale), mais empêche ensuite les autres personnes référencées de ma bibliothèque à l'externe de héritage de ma classe publique (scellée)?


0 commentaires

3 Réponses :


10
votes

Je suppose que vous pourriez faire le constructeur de la classe interne de sorte que seules d'autres classes de votre assembly puissent en dériver, si vous avez toujours besoin de créer des instances de cette classe, vous pouvez fournir une méthode d'usine. Pour renvoyer des instances.

Edit pour ajouter un échantillon: xxx


0 commentaires

6
votes

Eric Lippert Notes Trois façons de le faire. TL; DR: Ne scelle pas votre classe, mais incluez une méthode abstraite interne dans votre classe ou faites toutes les constructeurs internes ou privés, ou utilisez le Permaturé attribut pour ajouter des métadonnées à la classe.

Lien

Lien


0 commentaires

0
votes

Vous pouvez aussi essayer de faire quelque chose comme ça. XXX

Créez une classe interne et créez une classe vide publique qui hérite de la classe interne. Lorsque vous référencez la DLL, seule la classe publique sera visible pour l'utilisateur, mais toutes les fonctionnalités de la classe interne seront exposées.


2 commentaires

Je me suis produit, mais le gros problème est que s'il existe des méthodes accessibles au public consommant ou renvoyant ce type - quelle est la signature? Si vous utilisez externalsealedClass , vos héritiers "réels" ne seront pas éligibles. Si vous utilisez internalextensible , vos méthodes ne peuvent plus être publiques.


@mquander ne pouvait-il pas simplement me contenter de la programmation à une interface? C'est-à-dire que votre signature ressemblerait à "void" NUM