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 :

Que signifie: IDictionary<string, string> openWith = new Dictionary<string, string>()


Sujet :

C#

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

    Informations forums :
    Inscription : Février 2007
    Messages : 121
    Par défaut Que signifie: IDictionary<string, string> openWith = new Dictionary<string, string>()
    Cela veut dire que l'instance openWith ne peut utiliser que les membres de l'interface IDictionary (puisque c'est son type lors déclaration) pour accéder aux membres (cachés pour le cas) de Dictionnary. Est ce bien cela ?

    Merci pour vos lumières.

    A.

  2. #2
    Membre Expert
    Avatar de hed62
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juillet 2007
    Messages
    2 029
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 029
    Par défaut
    Non.



    Cela veut dire :
    Que openWith est un IDictionnary.
    Qu'il est instancié comme Dictionnary.
    Que les Key seront des String.
    Que les Value seront des String.

    Il s'agit d'une collection générique (doublement pour le coup).

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 62
    Par défaut
    je confirme hihi

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

    Informations forums :
    Inscription : Février 2007
    Messages : 121
    Par défaut ?
    "Cela veut dire :
    Que openWith est un IDictionnary."

    Donc openWith est il limité aux membres de IDictionnary ? Ou peut il accéder aux membres de Dictionnary ?

    "Qu'il est instancié comme Dictionnary."

    Qu'est ce que cette dernière phrase signifie vraiment ? C'est vraiment pas clair pour moi ...

  5. #5
    Membre Expert
    Avatar de hed62
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juillet 2007
    Messages
    2 029
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 029
    Par défaut
    "Cela veut dire :
    Que openWith est un IDictionnary."

    Donc openWith est il limité aux membres de IDictionnary ?
    Oui

    Ou peut il accéder aux membres de Dictionnary ?
    Aussi !

    Prenons un cas plus simple, pour expliquer cette notion d'héritage/interface.

    tu as une interface :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    public interface IVehicule
    {
      public void demarrer();
      public void arreter();
    }
    et une classe qui l'implémente :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    public class Voiture : IVehicule
    {
      // trucs de l'interface
      public void demarrer(){ /*du code*/ }
      public void arreter(){ /*du code*/ }
     
      // autres trucs
      protected List<Roue> mesRoues;
     
      public void tourner(){ /*du code*/}
    }
    Si tu fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    IVehicule voiture1 = new Voiture();
    alors ta voiture pourra faire tout ce qu'un Vehicule peut faire, + tout ce qu'une voiture peut faire.

    Il s'agit de la notion d'héritage. Si tu comprend mal ,fais quelques recherche, c'est largement expliqué partout. Si tu as d'autres questions précises , n'hésite pas !

  6. #6
    Membre émérite
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    700
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2005
    Messages : 700
    Par défaut
    Citation Envoyé par hed62 Voir le message
    alors ta voiture pourra faire tout ce qu'un Vehicule peut faire, + tout ce qu'une voiture peut faire.
    Non : uniquement ce que IVehicule peut faire.

    Pour utiliser Voiture, il faudra tenter un cast.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    IVehicule Vehicule;
    if( isEnforme )
    {
    Vehicule = new Voiture();
    }
    else
    {
    Vehicule = new Moto();
    }
     
    Vehicule.Weeling(); ===> compil pas, car cest uniquement chez une moto

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    121
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 121
    Par défaut Merci pour ton développement c un petit peu plus clair mais
    cependant, ... en procédant comme suit :

    Voiture voiture1 = new Voiture();
    au lieu de
    IVehicule voiture1 = new Voiture();

    Je pourrai aussi faire tout ce qu'un véhicule peut faire non. Puisqu'un objet de type voiture implémente nécessairement l'interface IVéhicule ... ?
    C'est à ce niveau là que je bloque dans le concept d'héritage en fait. Qu'est ce qui différencie ces deux lignes de code ?

    Dans ton exemple on peut donc logiquement faire (?) : voiture1.tourner();

    Vais faire quelques recherches sur le ouaib ...

    A.

  8. #8
    Membre émérite
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    700
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2005
    Messages : 700
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    IVehicule vehi = new Voiture();
    Voiture voit = new Voiture();
    voit faire tout ce qu'une Voiture peut faire, et donc un Vehicule (le contrat est signé avec l'interface : tout ce qu'elle contient est obligatoire dans voiture )

    vehi peut faire tout ce qu'un Vehicule peut faire.

    Après a toi de voir :
    Si je ne sais pas qu'elle Vehicule sera utilisé... Je met obligatoirement une Voiture au risque de renfermé toute évolutivité?
    Ou je met un Vehicule? Et à l'avenir on pourra meme utiliser un tricyle? Le code qui suivra ne changera pas?

  9. #9
    Membre Expert
    Avatar de hed62
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juillet 2007
    Messages
    2 029
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 029
    Par défaut
    L'utilisation de l'interface te permet de faire :

    et de mettre des Voiture, des Avions, etc.. dedans.

    Désolé pour l'oubli du cast :s

  10. #10
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    121
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 121
    Par défaut Récapitulons :
    Pour repprendre un peu tout ce qui a été dit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    IVehicule vehi = new Voiture();
    Permet de faire tout ce que peut faire un véhicule et des choses spécifiques à une voiture (style
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    vehi.quatreRouesMotrices = true;
    )

    Ensuite, si je fais pointer vehi sur un tricycle :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Tricycle monPetitBiclou = new Tricycle();
    vehi = monPetitBiclou ;
    Je peux donc faire tout ce que fait un véhicule et un tricycle (rouler dans un square par ex). Mais je ne peux plus faire des choses de voiture (quatre roues motrices). C'est ça ?

    Or si au départ je déclare vehi de type Voiture comme suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Voiture vehi = new Voiture();
    , je suis bloqué pour le faire pointer sur un objet de type Tricycle et lui faire faire des choses de tricycle.

    J'espère vraiment que c'est ça ...

  11. #11
    Membre Expert Avatar de Guulh
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    2 160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 2 160
    Par défaut
    Citation Envoyé par sauceaupistou Voir le message
    Pour repprendre un peu tout ce qui a été dit :
    Pour faire simple :
    crée un nouvel objet de type Voiture.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    IVehicule vehi = new Voiture();
    crée un objet de type Voiture, crée une référence (nommée vehi) de type IVehicule, et fait pointer cette référence vers l'objet créé par new Voiture().

    Tu te retrouves donc avec en mémoire un objet de type Voiture, et une référence de type IVehicule sur cet objet.

    L'utilité ? En l'occurence, pour les dictionnaires, il existe plein de classes(Dictionary, HashTable, SortedList, ...) qui implémentent l'interface IDictionary. Elles sont optimisées différemment et sont donc adaptées à des besoins précis.
    Mais ça, le code utilisant ta référence s'en fout. Tout ce qu'on veut, c'est faire des mondico[cle] = valeur, des foreach dessus, etc.
    Donc la référence est du type "fonctionnel", et ce n'est qu'à l'instantiation qu'on s'intéresse de savoir que ce IDico est en fait un Dico et pas un SortedList par exemple. Si on veut passer de l'un à l'autre, il suffit de changer la ligne où l'on instancie notre objet, et c'est tout.

    J'espère que c'est clair

    Et pour finir : ton objet référencé par vehi EST une voiture : (vehi is Voiture) renvoie true. Bien sûr si après dans le code tu fais vehi = new Tricycle(), ce sera (vehi is Tricycle) qui sera vrai.

  12. #12
    Membre Expert
    Avatar de hed62
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juillet 2007
    Messages
    2 029
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 029
    Par défaut
    Citation Envoyé par sauceaupistou Voir le message
    Pour repprendre un peu tout ce qui a été dit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    IVehicule vehi = new Voiture();
    Permet de faire tout ce que peut faire un véhicule et des choses spécifiques à une voiture (style
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    vehi.quatreRouesMotrices = true;
    )

    Ensuite, si je fais pointer vehi sur un tricycle :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Tricycle monPetitBiclou = new Tricycle();
    vehi = monPetitBiclou ;
    Je peux donc faire tout ce que fait un véhicule et un tricycle (rouler dans un square par ex). Mais je ne peux plus faire des choses de voiture (quatre roues motrices). C'est ça ?

    Or si au départ je déclare vehi de type Voiture comme suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Voiture vehi = new Voiture();
    , je suis bloqué pour le faire pointer sur un objet de type Tricycle et lui faire faire des choses de tricycle.

    J'espère vraiment que c'est ça ...

    Oui !

  13. #13
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    121
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 121
    Par défaut
    Merci à vous ...

  14. #14
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    121
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 121
    Par défaut Obrigado a todos ...
    Merci aussi à Gull pour l'explication détaillée du concept. Je m'endormirai moins bete ce soir.


+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Que signifie "Error : Data truncation" ??
    Par BouB dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 20/05/2005, 16h20
  2. [SQL6]Que signifie ce LEFT ?
    Par guy2004 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 30/01/2005, 19h18
  3. Que signifie Pagesize ?
    Par anthony70 dans le forum Débuter
    Réponses: 3
    Dernier message: 31/08/2004, 13h31
  4. Que signifier $0 et $@
    Par jaabouc dans le forum Linux
    Réponses: 6
    Dernier message: 01/06/2004, 15h17

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