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

ASP.NET Discussion :

Interface en tant que type


Sujet :

ASP.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Avatar de topolino
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    1 901
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 901
    Par défaut Interface en tant que type
    Bonjour,

    Quelle est l'avantage de mettre comme type de methode une interface ?

    Merci

  2. #2
    Membre Expert Avatar de Arthis
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    1 265
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : Italie

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 265
    Par défaut
    Donner une interface plutot qu'une classe. C'est simplement donner la notion de mouvement, d'action comme notion de communication entre deux entites.

    Prenons un exemple:

    la classe cheval a quatre pattes et sait courir.
    l'homme a deux apttes et sait courir.

    Tu as besoin pour ta carriole d'un animal qui sait courir, tu vas donc creer l'interface animal avec la fonction courir et les classes homme et cheval rempliront son contrat.

    Ainsi, peu importe que ce soit un cheval ou un homme (peu importe les proprietes de la classe) qui tire la carriole elle sait que quelqu un va courir pour la tirer.
    Toi tu ainsi pouvoir jouer avec cette interface pour selon le poids de la carriole la faire tirer par un homme ou par un cheval.

  3. #3
    Membre éprouvé
    Avatar de topolino
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    1 901
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 901
    Par défaut
    Si je mets comme type l'interface, à quel moment je fais lui dire c'est le cheval ou l'homme que je prefere utiliser ? car les 2 class font implementer la method courir de l'interface

  4. #4
    Expert confirmé
    Avatar de Immobilis
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2004
    Messages
    6 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 559
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    IAnimal moteur = new Homme();
    IAnimal moteur2 = new Cheval();
     
    moteur.Avance();
    moteur2.Avance();
    A+
    "Winter is coming" (ma nouvelle page d'accueil)

  5. #5
    Membre éprouvé
    Avatar de topolino
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    1 901
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 901
    Par défaut
    Ca revient au meme que

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Homme moteur = new Homme();
    Cheval moteur2 = new Cheval();
     
    moteur.Avance();
    moteur2.Avance();
    Alors je ne vois pas trop l'interet ? excusez moi mais j'essaye de comprendre

  6. #6
    Membre Expert Avatar de Arthis
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    1 265
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : Italie

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 265
    Par défaut
    Avec Carriole .moteur de type IAnimal:


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    if (Carrriole.Lourde)
      Carrriole.moteur = new Cheval();
    else
      Carrriole.moteur = new Homme();
     
     
    Carriole.moteur.avancer()

  7. #7
    Expert confirmé
    Avatar de Immobilis
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2004
    Messages
    6 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 559
    Par défaut
    Pour aller plus loin (fabrique) tu fais:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    IAnimal animal = Fabrique.CreateAnimal("Homme");
    animal.Avance();
    Tu evites ainsi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    string nomanimal = "Homme";
    switch (nomanimal.ToUpperInvariant())
    {
        case "CHEVAL":
            break;
        case "HOMME":
            break;
        default:
            break;
    }
    Exemple avec la recurcivité
    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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    public static IAnimal CreateAnimal(string animal)
    {
        Object obj = null;
     
        if (!string.IsNullOrEmpty(animal))
        {
            Assembly assembly = Assembly.GetExecutingAssembly();
     
            Type[] mytypes = assembly.GetTypes();
            foreach (Type t in mytypes)
            {
                if (t.IsClass)
                {
                    IList<CustomAttributeData> lstAttributs = CustomAttributeData.GetCustomAttributes(t);
                    foreach (CustomAttributeData atr in lstAttributs)
                    {
                        if ((atr.ConstructorArguments.Count > 0)
                            && atr.ConstructorArguments[0].ToString().Replace("\"", "") == animal.ToUpperInvariant())
                        {
                            try
                            {
                                obj = Activator.CreateInstance(t);
                                break;
                            }
                            catch (ArgumentNullException ex) { throw(ex); }
                            catch (ArgumentException ex) { throw(ex); }
                            catch (NotSupportedException ex) { throw(ex); }
                            catch (TargetInvocationException ex) { throw(ex); }
                            catch (MethodAccessException ex) { throw(ex); }
                            catch (MemberAccessException ex) { throw(ex); }
                            catch (TypeLoadException ex) { throw(ex); }
                        }
                    }
     
                }
            }
        }
        else
        { }
     
        return (IAnimal)obj;
     
    }
    A+
    "Winter is coming" (ma nouvelle page d'accueil)

Discussions similaires

  1. Réponses: 4
    Dernier message: 16/04/2012, 11h03
  2. Réponses: 11
    Dernier message: 22/09/2009, 16h50
  3. Charger un Type en tant que ressource
    Par Bobbledople dans le forum C#
    Réponses: 0
    Dernier message: 05/08/2009, 11h55
  4. Réponses: 8
    Dernier message: 31/03/2009, 15h52
  5. Afficher l'interface d'un exécutable lancé en tant que Service
    Par romulus dans le forum Windows Serveur
    Réponses: 8
    Dernier message: 07/01/2009, 09h54

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