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 :

Acceder au element d'une struct sans passer par le nom de la struct : impossible ?


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Février 2007
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 21
    Par défaut Acceder au element d'une struct sans passer par le nom de la struct : impossible ?
    Salut tous,

    Bon, j'essaie de faire un truc, je crois que c'est impossible, mais j'essaie quand meme, on sait jamais !

    J'ai une structure, et j'aimerais pouvoir acceder au menbre de cette structure sans passer par le nom de la structure.

    Exemple :
    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
    namespace MyNameSpace
    {
        public struct MyStruct
        {
            // ...
            string MyString1
            // ...
        }
     
        class Program
        {
            static void Main(string[] args)
            {
                // ...
                MyString1 = "toto";
                // (au lieu de MyStruct.MyString1 = "toto";)
                // ...
            }
    C'est possible en utilisant un using ou quelque chose comme sa ?
    (bien entendu, j'ai essayé MyNameSpace.MyStruct, mais sa marche pas :/)

    Merci

  2. #2
    Expert confirmé
    Avatar de Skyounet
    Homme Profil pro
    Software Engineer
    Inscrit en
    Mars 2005
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Software Engineer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Par défaut
    Ben tu peux pas et ça parait assez logique quand même.

    Déjà il faut que tu instancies ta structure (sauf si le champs est static et public aussi).

    Je vois pas pourquoi tu veux faire ça.

  3. #3
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Effectivement, c'est impossible... Toi, ça te parait peut-être évident qu'il s'agit du champ MyString1 de la structure MyStruct, mais le compilateur ne sait malheusement pas lire dans les pensées des développeurs

  4. #4
    Membre Expert
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 103
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 103
    Par défaut
    comme déjà cité,

    quelque soit le langage objet, ce n'est pas propre à C#,
    tu ne peux pas appeler la méthode MyString1 de MyStruct sans préciser sur quel type tu travail, donc MyStruct.

    ensuite il y a le problème de l'instance. Là tu voudrais qu'il accède à quelle instance de ta structure ?
    une structure n'est pas une classe static, elle n'a pas d'existance en mémoire temps qu'elle n'a pas été allouée quelque part... donc dans tous les cas ce pose 2 problemes pour le compilateur...
    Quel type (classe, struct, enum...) et surtout quelle instance.

    Si ta méthode est statique... ce pose quand meme le probleme du type.
    En plus dans ta déclaration, tu déclare MyString1 sans déclarations de portée, donc par défaut la portée est "private" et en prime tu ne déclare pas une méthode mais un attribut de classe (variable membre)...

    En fait cette question, va à l'encontre du développement objet quelqu'il soit... Aucun langage correctement structuré ne permet ce genre d'extrapolation et d'écriture pour des raisons de sécurité.

    Tu pourrais aussi me rétorquer, oui mais si ce nom de méthode n'est défini que dans MyStruct... et bien se poserait encore le probleme de l'instance concernée, et puis pourquoi un struct plutot qu'une classe ?

    Voila.

  5. #5
    Membre expérimenté

    Profil pro
    Inscrit en
    Août 2007
    Messages
    82
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2007
    Messages : 82
    Par défaut
    Alors je ne suis pas du tout d'accord avec ce qui est dit au-dessus ! ( juste pour faire de l'esbrouffe, sinon je suis ce qui a déjà été dit ;-) )

    Il existe une possibilité qui s'appelle VB.NET.
    Prenons le cas de classe Math (class statique) qui ne contient donc - par définition - que des méthodes statiques.
    VB.NET permet d'utiliser la syntaxe suivante :
    Imports System.Math

    et ensuite de faire un "Pow(10, 2)" au lieu de "Math.Pow(10, 2)"

    Ceci n'est possible qu'en VB.NET pour des classes statiques et pour me (re)mettre dans la lignée de ce qui a été dit, est impossible en C# et de toutes façons pas vraiment à conseiller, même en VB.NET.

  6. #6
    Membre émérite Avatar de ppphil
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    617
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2007
    Messages : 617
    Par défaut
    Xav987 vient peut-être du monde Delphi ...
    Delphi dans lequel on peut déclarer une variable de type struct et employer with pour accéder directement aux membres de la structure
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    TMyStruct = struct
    s: string;
    end;
     
    var Mystruct: TMyStruct;
     
    with MyStruct begin
    s = "coucou"; //ben non ! pour une fois ce ne sera pas Toto
    end;
    A ma connaissance, il n'y a rien de semblable dans C#. Ce qui n'est pas plus mal car la directive with permet très facilement de se planter, de ne plus savoir à quel objet on fait référence..

  7. #7
    Membre émérite

    Profil pro
    Inscrit en
    Février 2004
    Messages
    862
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2004
    Messages : 862
    Par défaut
    Citation Envoyé par Jarodtweiss Voir le message
    Ceci n'est possible qu'en VB.NET pour des classes statiques et pour me (re)mettre dans la lignée de ce qui a été dit, est impossible en C# et de toutes façons pas vraiment à conseiller, même en VB.NET.
    C'est aussi possible en C#...

Discussions similaires

  1. Réponses: 7
    Dernier message: 28/03/2007, 13h57
  2. comment executer une requete sans passer par le recordset ?
    Par php4life dans le forum VB 6 et antérieur
    Réponses: 9
    Dernier message: 13/12/2006, 20h57
  3. Envoyer une télécopie sans passer par l'assistant de télécopie
    Par therouxy dans le forum Composants VCL
    Réponses: 5
    Dernier message: 09/10/2006, 11h05
  4. Réponses: 5
    Dernier message: 13/04/2006, 22h54
  5. Afficher une image sans passer par les textures
    Par Black_Daimond dans le forum DirectX
    Réponses: 3
    Dernier message: 09/05/2003, 19h13

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