11
votes

La façon la plus simple de faire C # ne pas instancier une classe sauf hériter?

Quel est le moyen le plus simple de faire c # pas instancier une classe sauf hériter?

semble bizarre mais je ne veux pas expliquer le pourquoi. J'ai une classe de base et deux cours qui héritent. Je veux utiliser la classe dérivée uniquement et pas la base. La classe de dérive n'a aucune fonction supplémentaire. Quel est le moyen le plus simple de ne pas me permettre d'écrire une nouvelle base de base (); donc je ne l'utilise pas accidentellement? J'ai des fonctions qui fonctionnent sur la classe de base et non le dérivé.


4 commentaires

J'aime les questions où une personne décrit une fonctionnalité existante à la lettre (dans ce cas de classes abstraites). Ce sont des questions soignées et bien rangées avec de telles réponses claires, elles me satisfont grandement.


Il se distingue que quelqu'un m'a également évité. Bizarre.


@ ACIDEZOMBIE24, je suppose que vous avez accepté une réponse impopulaire lorsqu'il y avait des réponses avec> 20 upvotes que vous avez ignorés.


Quel est le gros problème? I +1 Les 20 votes Les deux réponses sont les mêmes. Utilisez le mot-clé abstrait.


8 Réponses :


46
votes

Faire la classe an abstrait code> classe de base.

abstract class Person { }

class Programmer : Person { }

var person = new Person();          // compile time error
var programmer = new Programmer();  // ok


1 commentaires

Vous ne pouvez même pas voir le nom de la classe sur la liste IntelliSense lorsque vous essayez de l'instancier, ce qui est génial pour la prise de conscience :)



5
votes

La classe de base peut-elle être abstraite? Cela le ferait.


0 commentaires

7
votes

0 commentaires

5
votes
public abstract class BaseClass {
...
}

0 commentaires

5
votes

au lieu de la normale:

"Classe publique MyClass" Code> P>

Le fait P>

"public abstract Class MyClass"


0 commentaires

1
votes

Faire le constructeur de basoclass protégé: xxx


2 commentaires

Seulement s'il ne peut pas faire le résumé de la classe de base pour une raison étrange.


Il y a de meilleures solutions ci-dessus.



1
votes

La manière dont vous décrivez votre besoin, rendant votre classe abstrait est la voie à suivre. Ce sera vous empêcher d'instantifier la classe de base et vous permettra d'appeler les fonctions sur ce. Cela vous permettra également de marquer des fonctions et des propriétés comme résumé et forcer les classes héritées à les mettre en œuvre.

Si vous n'aviez pas besoin de partager le code, une interface serait une option agréable. Cela vous permet de la mettre en œuvre de manière très similaire à une classe d'Abstarct et de jeter votre implémentations dans elle.

J'espère que cela ajoute une certaine valeur.


0 commentaires

0
votes

Utilisez un constructeur protégé pour la classe de base


0 commentaires