IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

Différence entre virtual et abstract


Sujet :

C#

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    79
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 79
    Par défaut Différence entre virtual et abstract
    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

  2. #2
    Rédacteur
    Avatar de Thomas Lebrun
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    9 161
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 9 161
    Par défaut
    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+

  3. #3
    Membre expérimenté Avatar de scifire
    Inscrit en
    Juillet 2004
    Messages
    226
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 226
    Par défaut
    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.
    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.

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    79
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 79
    Par défaut
    Citation Envoyé par scifire
    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:


    • 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" ?

  5. #5
    Membre expérimenté Avatar de scifire
    Inscrit en
    Juillet 2004
    Messages
    226
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 226
    Par défaut
    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.

  6. #6
    Membre émérite
    Avatar de shwin
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    568
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Novembre 2003
    Messages : 568
    Par défaut
    Citation Envoyé par _LVEB_
    Quelle est la differance entre virtual et "sans rien devant" ?
    Virtual permet de dire au membre qu'il peut être overrider

    ex
    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!!
    }
    }
    la méthode m1 n'est pas overridable car elle est pas virtuel

  7. #7
    Rédacteur
    Avatar de Thomas Lebrun
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    9 161
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 9 161
    Par défaut
    Elle n'était pas clair mon explication ?

  8. #8
    Membre Expert Avatar de Mose
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 143
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 143
    Par défaut
    Citation Envoyé par Thomas Lebrun
    Elle n'était pas clair mon explication ?
    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 pas

    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.

  9. #9
    Invité de passage
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Septembre 2015
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte de système d'information
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2015
    Messages : 1
    Par défaut La réponse
    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 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    A i = new B();
    i.f();
    j'appelle la fonction f définie dans B

    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 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    A i = new B();
    i.f();
    j'appelle la fonction f définie dans A

Discussions similaires

  1. différence entre Abstract et Interface?
    Par prugne dans le forum Débuter avec Java
    Réponses: 5
    Dernier message: 01/05/2009, 17h28
  2. la différence entre 'abstract' et ' virtual'
    Par Medoou dans le forum Débuter
    Réponses: 6
    Dernier message: 04/03/2009, 10h36
  3. Réponses: 6
    Dernier message: 26/11/2007, 18h06
  4. [Virtual Pascal] Différences entre TP7 et Virtual Pascal
    Par gbuxo dans le forum Autres IDE
    Réponses: 2
    Dernier message: 25/01/2006, 07h22
  5. [C#] Différences entre Virtual et Abstract
    Par kunfuka dans le forum C#
    Réponses: 2
    Dernier message: 11/11/2005, 13h14

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo