Bonjour,
En fait je ne comprend pas très bien la différence entre les mots clés abstract et virtual.
J'ai vu un autre tread mais le lien donne est mort (je crois)
Merci de votre aide
Bonjour,
En fait je ne comprend pas très bien la différence entre les mots clés abstract et virtual.
J'ai vu un autre tread mais le lien donne est mort (je crois)
Merci de votre aide
Une classe abstraite (abstract) est une classe que l'on ne peux pas instancier: il faut obligatoirement créér une classe enfant.
Une méthode marquée comme virtuelle (virtual) offre la possibilité, aux classes qui héritent de la classe qui implémente cette méthode virtuelle, de redéfinir l'implémentation de cette méthode (au moyen du mot clé override).
A+
Thomas LEBRUN: MCAD.NET, MCTS (Win et Web), MCPD(Win et Web) & Microsoft MVP Client Application Development
WPF par la pratique, mon livre sur WPF ! (également disponible ici ou là)
A la découverte de .NET
Je suis desolee que c'est en englais mais je vaux pas le traduire en francais. Je crois que cela va te donner une idee de POO.An abstract overridable routine:
the derived class inherits the routine's interface but NOT it's implementation.
In C# we use the "abstract" keyword or interfaces.
An overridable routine:
the derived class inherits the routine's interface, implementation, and is also allowed to override.
In C# we use the "override" and "virtual" keywords.
Note: methods are non-virtual by default in C#.
A non-overridable routine:
the derived class inherits the routine's interface, implementation and is NOT allowed to override.
In C# we use the "sealed" keyword.
Ce qui veut dire qu'une methode:Envoyé par scifire
- abstract est "vide"
- virtual est "remplie" mais elle peut etre "reecrite"
- sealed ne peut etre reecrite
- sans rien "?????"
Quelle est la differance entre virtual et "sans rien devant" ?![]()
abstract et sealed ne sont que pour les classes.
virtual n'est que pour les methodes.
Une methode "sans rien" ne peut pas etre redefinie mais elle peut etre "reecrite"(mot-clef new). Par default(pas virtual) elle ne peut pas etre redefinie juste reecrite.
Je doute que c'est clair mais j'espere bien.![]()
Virtual permet de dire au membre qu'il peut être overriderEnvoyé par _LVEB_
ex
la méthode m1 n'est pas overridable car elle est pas virtuel
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 public class A { public string m1() { return "m1" ;} protected virtual m2() { return "m2"; } } public class B : A { protected override m2() { //ici je veux faire qqechose de plus que la base.m2 fait!! } }
Elle n'était pas clair mon explication ?![]()
Thomas LEBRUN: MCAD.NET, MCTS (Win et Web), MCPD(Win et Web) & Microsoft MVP Client Application Development
WPF par la pratique, mon livre sur WPF ! (également disponible ici ou là)
A la découverte de .NET
Plus de 10 mots dans une phrase, et t'as une chance sur deux de perdre ton lecteur, c'est pour ça que je dit ça dans une phrase bien longue pour que ceux qui pourraient se sentir visés et qui pourraient se vexer ne la lisent pasEnvoyé par Thomas Lebrun
P.S. scifire : "Je doute que c'est clair". Moi aussi, je doute, mais je doute que ce soit clair.
P.S. scifire (encore : "Je suis desolee que c'est en englais". Moi aussi je suis désolé que ta phrase ne soit pas en français.
Mose, désagréable, de toute façon.
Vu que c'est le premier enregistrement qui sort sur google, voici la réponse :
pour une classe :
abstract : signifie que la classe est abstraite ne peut pas être instanciée telle quelle. Elle doit être dérivée.
sealed : la classe ne peut pas être dérivée
pour une fonction/propriété :
abstract : dans une classe abstraite, signifie que la fonction doit être définie dans les classes dérivées.
virtual : dans une classe instanciable ou abstraite, signifie que la fonction/propriété peut être redéfinie dans les classes dérivées.
rien : la fonction n'est pas abstraite ni virtuelle
sealed : dernière redéfinition possible de la fonction ou de la propriété
new : remplace la définition de la fonction dans la classe enfant
override : redéfinition d'une fonction abstraite ou virtuelle dans la classe enfant
sealed override : dernière redéfinition d'une fonction abstraite ou virtuelle dans la classe enfant
Une classe abstraite dont toutes les fonctions ou propriétés sont abstraites peut être remplacée par une interface
Si une fonction est abstraite ou virtuelle, sa dernière redéfinition est toujours appelée.
Si A est une classe abstraite définissant f abstraite
Si B est une classe définissant le corps de f
si je fais :
j'appelle la fonction f définie dans B
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 A i = new B(); i.f();
Par contre
Si A est une classe définissant f (sans modificateur)
Si B est une classe définissant une nouvelle implémentation de f (mot clef new)
alors si je fais :
j'appelle la fonction f définie dans A
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 A i = new B(); i.f();
Partager