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

Framework .NET Discussion :

Utilisation d'interface en c#


Sujet :

Framework .NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre actif
    Inscrit en
    Février 2010
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Février 2010
    Messages : 15
    Par défaut Utilisation d'interface en c#
    bonjour,
    j'ai esseyé de tester le code d'utilisation d'inteface en c# mais ca marche pas, voila le code ci-deesous :

    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    public interface IVisual
    {
       void Paint();
    }
     
    class Rectangle : IVisual
    {
        public  void move() 
        {
            Console.WriteLine("la methode move");
        }
     
        void IVisual.Paint() 
        {
            Console.WriteLine("la methode paint");
        }
     
        static void Main(string[] args)
        {
            Rectangle r = new Rectangle();
            r.move(); // Ok
            r.Paint();//
            IVisual v = (IVisual)r;            
            v.Paint(); // Ok
            Console.ReadKey();
        }
    }

    le probleme c'est que r.paint n'est pas accecible, j'ai compris pourkoi, j'ai bien implémenté mon interface et la methode paint aussi.

    merci de votre support

  2. #2
    Membre éclairé
    Homme Profil pro
    Développeur Java
    Inscrit en
    Janvier 2007
    Messages
    256
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Janvier 2007
    Messages : 256
    Par défaut
    Bonjour,

    Pourquoi mettre
    ?

    Lorsque l'on implémente une interface, vous devez mettre ceci :
    Car le compilateur sait déjà que la méthode Paint vient de IVisual puisque vous implémenté l'interface IVisual. Et comme chaque méthode de l'interface est publique, votre méthode paint devra l'être également. Et par conséquent, est disponible dans votre main.

  3. #3
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Billets dans le blog
    3
    Par défaut
    Citation Envoyé par gta126 Voir le message
    Pourquoi mettre
    ?
    C'est ce qu'on appelle une implémentation explicite. On s'en sert par exemple si on a deux interfaces exposant deux méthodes/propriétés ayant la même signature.

    Il n'y a rien de mal à l'utiliser si on est pas dans cette situation, mais ce n'est pas obligatoire donc les deux sont valides.

    Sinon la solution de gta126 semble la bonne
    Less Is More
    Pensez à utiliser les boutons , et les balises code
    Desole pour l'absence d'accents, clavier US oblige
    Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.

  4. #4
    Membre éclairé
    Homme Profil pro
    Développeur Java
    Inscrit en
    Janvier 2007
    Messages
    256
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Janvier 2007
    Messages : 256
    Par défaut
    Autant pour moi. Je ne connaissais pas du tout cette notation. Par contre en testant, il refuse de compiler le code de khalidwh si je met public void IVisual.Paint() tandis que sans le IVisual cela fonctionne.

    Ce n'est probablement pas le sujet de base de ce topic mais sauriez vous pourquoi ?

  5. #5
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Billets dans le blog
    3
    Par défaut
    Ahh oui effectivement il y a une subtilité à laquelle je n'ai pas fait attention

    Si l'interface est implémentée explicitement, voici le code qu'il faut avoir dans la méthode Main :
    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    static void Main(string[] args)
    {
        IVisual r = new Rectangle();
        r.move();
        r.Paint();
        Console.ReadKey();
    }
    Avec r de type IVisual, il n'y a plus de problème au niveau de la méthode r.Paint, par contre c'est r.move qui nous pose problème, car elle ne fait pas partie de l'interface...

    Donc on pourrait caster r en Rectangle afin de pouvoir bénéficier de la méthode r.move :
    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    ((Rectangle)r).move();

    Si on décide de ne pas implémenter l'interface explicitement, il suffit de rajouter public devant void Paint() et le code de la méthode Main fonctionnera tel quel.

    Il faut donc choisir entre l'implémentation explicite ou l'implémentation "classique"
    Less Is More
    Pensez à utiliser les boutons , et les balises code
    Desole pour l'absence d'accents, clavier US oblige
    Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.

  6. #6
    Membre éclairé
    Homme Profil pro
    Développeur Java
    Inscrit en
    Janvier 2007
    Messages
    256
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Janvier 2007
    Messages : 256
    Par défaut
    Merci pour cet éclaircisemment DotNetMatt. J'espère maintenant que l'auteur aura trouvé la réponse qui lui convient

Discussions similaires

  1. [Débutant] Quand utiliser une interface ?
    Par dahtah dans le forum Langages de programmation
    Réponses: 10
    Dernier message: 08/08/2007, 16h48
  2. [C#][code] Utilisation des interfaces
    Par LE NEINDRE dans le forum Windows Forms
    Réponses: 21
    Dernier message: 17/07/2006, 10h06
  3. utiliser l'interface COM
    Par baert dans le forum C++
    Réponses: 2
    Dernier message: 18/01/2006, 16h14
  4. TForm dans une DLL avec utilisation d'Interface
    Par guedelmalin dans le forum Langage
    Réponses: 13
    Dernier message: 17/06/2005, 11h58

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