2017-10-17 4 views
-3

J'essaie de gérer une structure simple. Tout ce dont j'ai besoin pour avoir toutes les variables dans la structure qui seront utilisées plus tard comme une chaîne de connexion. Je ne vais pas attribuer de nouvelles valeurs aux variables listées. Je sais comment faire la même chose avec les classes mais maintenant je souhaite découvrir comment frapper est avec des structures. Aussi, je n'ai pas besoin de ces paramètres chaîne p1 etc dans le constructeur mais sans eux, je reçois une erreur. S'il vous plaît aider)Façon correcte d'utiliser une structure en C#

public struct ConnectionString 
{ 
    // vars declaration 
    public string ip, login, password; 

    // struct constructor 
    public ConnectionString(string p1, string p2, string p3) 
    { 
     ip = "192.168.1.1"; 
     login = "boris"; 
     password = "123456"; 
    } 
} 

Mais quand je l'appelle, j'ai une sortie vide:

ConnectionString ss = new ConnectionString(); 
Console.WriteLine("connection string: " + ss.password); 
+1

D'accord, mais quelle est votre question? Qu'est-ce qui vous pose problème? * Pourquoi * voulez-vous utiliser une structure pour cela? – Amy

+3

"comment faire ceci avec des structures": NON. Les structs sont pour des cas spéciaux, ce n'est pas un de ceux-là. La sémantique du type de valeur ne sert à rien ici. –

+0

@HenkHolterman quels sont ces cas? –

Répondre

0

Au lieu de:

public ConnectionString(string p1, string p2, string p3) ..... 

utilisation:

public static ConnectionString Create() 
{ 
    return new ConnectionString { ip = "a", login = "b", password = "c" }; 
} 

et utiliser:

ConnectionString ss = ConnectionString.Create(); 

Cela suppose que vous devez utiliser une structure, bien sûr.

+0

Si j'appelle le constructeur comme vous l'avez dit: ConnectionString ss = new ConnectionString.Create(); Je gettig une erreur de gravité \t code \t Description de \t projet \t fichier \t ligne \t d'état de suppression d'erreur \t CS0426 \t Le nom du type « Créer » n'existe pas dans le type « ConnectionString » \t SadRecreate –

+0

@DiegoSlinger Vous devez ajouter le code avant cela ('public static ConnectionString Create() ......') à ​​l'intérieur de la structure 'ConnectionString'. – ispiro

+0

mon code ressemble à ceci: namespace StarterProject { \t public struct ConnectionString \t { \t \t // vars déclaration \t \t ip chaîne publique, login, mot de passe; \t \t // constructeur struct \t \t ConnectionString public static Créer() \t \t { \t \t \t return new ConnectionString {ip = "a", login = "b", mot de passe = "c"}; \t \t} \t}} –

2
// struct constructor 
public ConnectionString(string p1, string p2, string p3) 
{ 
    ip = "192.168.1.1"; 
    login = "boris"; 
    password = "123456"; 
} 

Mais quand je l'appelle, j'ai une sortie vide:

ConnectionString ss = new ConnectionString(); 
Console.WriteLine("connection string: " + ss.password); 

Vous n'êtes pas appeler le constructeur que vous avez défini; vous appelez le constructeur par défaut implicitement généré, ce qui explique pourquoi aucun des champs n'est rempli.

EDIT: De l'documentation, notez les points suivants:

Dans une déclaration struct, les champs ne peuvent être réinitialisés à moins qu'ils soient déclarés comme const ou statique.

Options:

1) Supprimer votre constructeur et je raconterai les champs const et fournir des valeurs, à savoir

public struct ConnectionString 
{ 
    // vars declaration 
    public const string ip = "192.168.1.1"; 
    public const string login = "boris"; 
    public const string password = "123456"; 
} 

2) les renseigner les champs après avoir appelé le constructeur par défaut,

3) Appelez le constructeur (avec les paramètres) que vous avez défini,

4) (meilleur ption) n'utilise pas de structures pour ce problème.

Référence: Using Structs (C# Programming Guide)

+0

Pas de problème. Envisagez de cliquer sur la coche verte à côté de la réponse si vous souhaitez l'accepter. –

0

Puisque vous n'utilisez pas les paramètres passés dans le constructeur à l'intérieur, vous pouvez l'appeler comme indiqué ci-dessous. As others have already commented, getting connection string is not something, you should do with struct. Les structures sont généralement utilisées lorsqu'un ensemble de paramètres et de fonctionnalités connexes doit être utilisé collectivement et mis à disposition en tant qu'ensemble pour des zones d'appel plus petites. Ils sont passés par valeur, pas par référence.

ConnectionString connect = new ConnectionString("","",""); 
Console.WriteLine("connection string: " + connect.password);