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 :

Quelques questions de syntaxe


Sujet :

ASP.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Mai 2006
    Messages
    397
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 397
    Par défaut Quelques questions de syntaxe
    Hello,

    Je suis en train de suivre l'excellent tutoriel NerdDinner avec le bouquin ASP.NET MVC 1.0 (merci developpez.com pour le compte rendu sur le livre , et j'ai quelques question sur la synthaxe qu'il y est parfois utilisé:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    public static IEnumerable<string> Countries
            {
                get
                {
                    return countryRegex.Keys;
                }
            }
    Que fait le get exactement?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
            //Properties
            public Dinner Dinner { get; private set; }
            public SelectList Countries { get; private set; }
    Pareil, je pense qu'il doit s'agit d'accesseur, mais je ne suis pas sur. Et si c'est bien ce dont je pense, comment fait-on pour y accéder?

    Je n'ai pas très bien compris ce que veut dire le mot "yield". Apparement, dans la doc c'est pour dire au compilateur qu'il s'agit d'un iterator. Quelqu'un aurait une explication claire et un petit exemple simple à comprendre?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    FormsAuth = formsAuth ?? new FormsAuthenticationService();
    Que veut dire le "??"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
     public IFormsAuthentication FormsAuth
            {
                get;
                private set;
            }
    Idem, que pour le cas des propriété énnoncé plus haut?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
     public AccountMembershipService()
                : this(null)
            {
            }
    Je n'ai jamais vu cette écriture lors de la définition d'un constructeur. Si quelqu'un à une petite explication




    Merci d'avance pour vos réponses

    L.

  2. #2
    Membre chevronné Avatar de jacky01
    Profil pro
    Développeur .NET
    Inscrit en
    Juin 2007
    Messages
    537
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Juin 2007
    Messages : 537
    Par défaut
    Bonjour, tout d'abord les "get" et "set" sont bien des accesseurs, pour les utilisé il n'y a rien de spécial à faire, il te suffit de les implémenter après l"accès à tes propriété d'objet se fait de la même manière. L'utilité des accesseurs c'est de pouvoir faire des contrôles sur le valeur passés.
    Voici des explications plus exhaustive :
    http://www.developpez.net/forums/d37...sharp-utilite/

    Ensuite pour la synthaxe
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
     public AccountMembershipService()
                : this(null)
            {
            }
    Cela correspond à une surcharge de constructeur, en général on l'utilise quand on met en place des classe virtuelles ou des interfaces.
    Quelques explications ici :
    http://www.developpez.net/forums/d69...eur-this-base/

    Par contre pour le
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    FormsAuth = formsAuth ?? new FormsAuthenticationService();
    Je n'est jamais vue cette syntaxe. A priori je dirai que ca instancie un objet de type FormsAuthenticationService si formsAuth n'est pas encore instancié. Mais à confirmée ^^

    Voila, en espérant avoir été assez clair

  3. #3
    Membre expérimenté
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    203
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 203
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    FormsAuth = formsAuth ?? new FormsAuthenticationService();
    C'est l'équivalent de

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    FormsAuth = (formsAuth == null) ? new FormsAuthenticationService() : formsAuth ;

  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
    Salut,
    Citation Envoyé par jacky01 Voir le message
    Bonjour, tout d'abord les "get" et "set" sont bien des accesseurs, pour les utilisé il n'y a rien de spécial à faire, il te suffit de les implémenter après l"accès à tes propriété d'objet se fait de la même manière.
    Avec le framework 3.5 et VS 2008, sauf traitement spécifique, il n'est plus nécessaire d'implémenter les accesseurs, le compilateur le fait pour nous.

    A+
    "Winter is coming" (ma nouvelle page d'accueil)

  5. #5
    Membre éclairé
    Inscrit en
    Mai 2006
    Messages
    397
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 397
    Par défaut
    Citation Envoyé par Immobilis Voir le message
    Salut,Avec le framework 3.5 et VS 2008, sauf traitement spécifique, il n'est plus nécessaire d'implémenter les accesseurs, le compilateur le fait pour nous.

    A+
    Je ne suis pas sûr d'avoir compris. Si j'ai le code suivant dans une classe:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    private string myString;
    Je peux sans autre faire dans une autre classe qui instancie ma première classe le code suivant?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
     
    public string myOtherString;
     
    // du code
     
    myOtherString = PremiereClasse.myString;

  6. #6
    Rédacteur
    Avatar de lutecefalco
    Profil pro
    zadzdzddzdzd
    Inscrit en
    Juillet 2005
    Messages
    5 052
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : zadzdzddzdzd

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 052
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public string MyString { get; set; }
    Le compilo fait le reste

  7. #7
    Membre éclairé
    Inscrit en
    Mai 2006
    Messages
    397
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 397
    Par défaut
    Citation Envoyé par lutecefalco Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public string MyString { get; set; }
    Le compilo fait le reste
    Quelque chose doit m'échapper:

    Si on fait le code que tu as donné, ou qu'on ne le fasse pas, qu'est-ce que cela change?

  8. #8
    Membre Expert
    Homme Profil pro
    Inscrit en
    Juillet 2007
    Messages
    1 277
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Réunion

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 277
    Par défaut
    Un champ privé n'est pas accessible depuis les autres classes.

    Donc, si tu as un "private string privateString;" dans une classe "MaClasse", tu ne pourras pas faire dans une méthode d'une autre classe un "maString = maClasse.privateString;" (en supposant que maClasse est une instance de MaClasse) : il y aurait une erreur de compilation.

    Les propriétés (ou accesseurs get/set) sont juste une simplification d'écriture. Il faut les voir comme des méthodes. Au lieu d'écrire "public string GetMyString() { return myString; }", on va écrire "public string MyString { get { return myString; }" ... mais le compilateur lui, va créer une méthode qu'il nomme par défaut get_MyString().

    Lorsque tu écris :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public string MyString { get; set; }
    C'est comme si tu écrivais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    private string myString;
     
    public string MyString { 
       get { return myString; } 
       set { myString = value; } 
    }
    sauf que myString (nom donné à titre indicatif, ce n'est pas le nom qui sera donné par le compilateur) n'est pas accessible, même dans la classe. Il faut passer dans tous les cas par la propriété.

    Perso, j'utilise rarement cette simplification car elle empêche tout contrôle de la valeur en entrée, voir sur la valeur en sortie. Il est tout de même très rare d'avoir des propriétés qui acceptent toutes les valeurs possibles et imaginables.

  9. #9
    Membre éclairé
    Inscrit en
    Mai 2006
    Messages
    397
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 397
    Par défaut
    Ok je comprend mieux.

    J'ai un peu de mal à voir alors, mise à part la simplification d'écriture, ce qu'apporte cette manière de faire.

    Pour une variable de type privée, ça peut être utile. Mais pour une variable de type publique, je ne vois pas ce que ça apporte vu qu'on peut y accéder immédiatement...

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

Discussions similaires

  1. [C#] quelques questions sur la syntaxe de base en C#
    Par DonJR dans le forum Windows Forms
    Réponses: 14
    Dernier message: 06/12/2006, 14h01
  2. [Débutant]Quelques questions de principe sur l'API win32
    Par silver_dragoon dans le forum Windows
    Réponses: 4
    Dernier message: 19/03/2004, 18h38
  3. [install]Install sous windows... quelques questions
    Par omega dans le forum Eclipse Java
    Réponses: 5
    Dernier message: 26/02/2004, 09h50
  4. [MFC] Quelques questions de débutant...
    Par Sephi dans le forum MFC
    Réponses: 4
    Dernier message: 20/02/2004, 17h25
  5. Quelques questions sur le TWebBrowser...
    Par CorO dans le forum Web & réseau
    Réponses: 3
    Dernier message: 17/01/2003, 21h23

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