classe abstraite je n'ai pas besoin de remplacer toutes les méthodes?
J'ai besoin d'hériter d'une classe abstraite de base. Je veux remplacer une seule méthode. Mais Visual Studio me forcerait à les remplacer tous. je suis donc primordial de plus de 10 méthodes qui jette NonImplementedException
je trouve ça stupide. N'est-ce pas là un moyen de remplacer uniquement ce dont j'ai besoin. Ou au moins pour indiquer à Visual Studio pour remplacer le reste (Non mis en œuvre des méthodes et propriétés)?
la classe de base est écrite par le cadre, donc je ne peux pas le changer (je parle de RoleProvider Asp.net MVC)
- Vous devriez seulement besoin de mettre en œuvre ceux qui n'ont pas de défaut de mise en œuvre. Si vous le souhaitez, vous pouvez ajouter une implémentation par défaut de votre classe de base qui, de retour de l'exception.
- Si vous ne pouvez pas utiliser toute autre méthode, alors vous pouvez simplement laisser mannequin
throw new NonImplementedException();
le corps de méthode. - Quelqu'un a donné un bas de vote, mais je l'ai changer de place. Regarde ici, à Stackoverflow est pas autorisé d'avoir une base de doute.
Vous devez vous connecter pour publier un commentaire.
Ici, le compilateur vous demandons seulement de
override
Method2()
comme un mandat. Il ne vous demandons pas de remplacerMethod1()
ouMethod3()
. Vous pouvezoverride
Method3()
qu'il porte clévirtual
bien.Le vrai problème ici est que vous avez une classe de base avec autant de méthodes qu'une classe dérivée peut fonctionner qu'avec un sous-ensemble d'entre eux. Cela signifie que votre classe de base la plus probable a de multiples responsabilités et viole ainsi le Principe de Responsabilité unique (SRP).
La solution est de diviser votre classe de base en plusieurs petites classes où chacun d'eux a un seul et unique responsabilité.
Si la classe de base n'est pas de vous, vous avez vraiment besoin de mettre en œuvre l'ensemble de ces méthodes.
Si la classe de base est une classe qui viole la SRP et de votre mise en œuvre peut vraiment fonctionner correctement si vous implémentez seulement un petit sous-ensemble des méthodes que vous pouvez créer une classe de base abstraite qui en découlent autre classe de base abstraite. Dans votre classe de base abstraite, vous pouvez mettre en œuvre toutes les méthodes que vous n'avez pas besoin de jeter une
NotImplementedException
. Ne pas mettre en œuvre ces méthodes dont vous avez besoin.Maintenant, dériver une classe à partir de votre classe de base - maintenant, vous n'avez qu'à mettre en œuvre les méthodes qui vous intéresse. Assurez-vous de documenter correctement.
Pas, c'est comment les classes abstraites travail. Si vous faites votre classe abstraite ainsi vous n'avez pas besoin de mettre en œuvre toutes les méthodes.
Si la méthode est résumé , vous doit remplacer.
Si la méthode est virtuel , vous pouvez remplacer mais pas nécessairement
Il est nécessaire de neutraliser toutes les méthodes qui sont déclarés comme
abstract
. vous ne pouvez pas ignorer le non-méthodes concrètes. Si vous voulez vraiment faire, puis faites votre classe de base abstraite. vous ne pouvez pas modifier le mécanisme d'abstraction.Souviens
Les classes abstraites ont les caractéristiques suivantes:
1. Une classe abstraite ne peut pas être instanciée.
2. Une classe abstraite peut contenir des méthodes abstraites et des accesseurs.
3. Il n'est pas possible de modifier une classe abstraite avec le scellé modificateur, ce qui signifie que la classe ne peut pas être héritée.
4. Un non-abstraite de la classe dérivée d'une classe abstraite doit inclure des implémentations réelles de tous hérité de méthodes abstraites et des accesseurs.