10
votes

Déclaration de méthode abstraite - virtuel?

sur MSDN J'ai trouvé qu'il s'agissait d'une erreur d'utiliser un modificateur "virtuel" dans une déclaration de méthode abstraite. L'un de mes collègues, qui devrait être un développeur assez expérimenté, bien que cela utilise cela dans son code:

public abstract class BusinessObject   
{
    public virtual void Render(){}
    public virtual void Update(){}
}


0 commentaires

5 Réponses :


4
votes

Celles-ci ne sont pas des méthodes abstraites, elles sont des vides par défaut. La différence est que vous n'avez pas à les remplacer (si vous ne le faites pas, rien ne se passera).

Cela pourrait aider votre compréhension à les voir formaté comme: P>

public abstract class BusinessObject   
{
    public virtual void Render()
    {

    }

    public virtual void Update()
    {

    }
}


3 commentaires

Oh, c'est aussi je ne peux pas utiliser le mot-clé virtuel s'ils avaient un corps, non?


@MOCCO: Ils font ont un corps, c'est juste vide. Les méthodes ne peuvent pas être virtuel sans un corps.


S'il n'y a pas de corps, ils ne peuvent pas être virtuels. S'il y a un corps, ils ne peuvent pas être abstraits



9
votes

Il peut avoir du sens si la classe Abstrée fournit un point facultatif en option lorsque des classes héritées peuvent changer le comportement.

de sorte que les classes héritées seront ne doivent pas être forcées de la mettre en œuvre, mais elles peuvent s'ils doivent.

généralement cette méthode est appelée par la classe abstraite: xxx

ici il est logique d'avoir Onaddedfoo comme virtuel et non abstrait


0 commentaires

5
votes

Je suppose que le MSDN signifie que vous ne pouvez pas utiliser le modificateur virtuel abstrait sur une méthode en même temps.

Vous pouvez soit faire xxx

ce qui signifie qu'une classe héritante peut remplacer cette méthode.

ou vous pouvez faire xxx

ce qui signifie qu'une classe héritante doit remplacer cette méthode.


0 commentaires

2
votes

Vous vous référez probablement à cette phrase

Vous ne pouvez pas utiliser le modificateur virtuel avec l'état statique, abstrait, privé ou remplacer les modificateurs.

Cela signifie que vous ne pouvez pas utiliser cela dans la déclaration de méthode une méthode ne peut pas être à la fois virtuelle et abstraite.

L'usage que vous avez présenté est bien, car la classe est abstraite, cela signifie que vous pouvez y avoir des méthodes abstraites (sans mettre en œuvre qui doit être mise en œuvre par classe d'enfants) et la méthode virtuelle (avec la mise en œuvre pouvant être remplacer en classe enfant).


0 commentaires

0
votes

Le code Follwing signifie que vous DO OVVVERIDE Cette méthode dans une classe héritée et vous ne pouvez pas mettre une certaine logique dans le corps de la méthode abstraite: xxx

mais si vous déclarez Méthode virtuelle Vous pouvez mettre une certaine logique à l'intérieur et peut ovveride xxx


0 commentaires