2010-08-06 14 views
0

Salut, j'ai écrit une structure imbriquée en C#. Trouver l'extrait de code ci-dessous:Comment affecter la valeur à la structure principale/parent dans une structure imbriquée?

public struct SMB_MESSAGE 
     { 

      #region SMB Parameter 
      public struct SMB_PARAMETERS 
      { 
       public byte WordCount; 
       public ushort[] Words; 
      } 
      #endregion 

      #region SMB Data 
      public struct SMB_DATA 
      { 
       public ushort ByteCount; 
       public struct Bytes 
       { 
        public ushort BufferFormat; 
        public byte[] Name; 
       } 
      } 
      #endregion 

     } 

maintenant Alors que j'attribue la valeur à la structure intérieure comme ci-dessous:

SMB_MESSAGE SMBMESSAGE; 

SMB_MESSAGE.SMB_PARAMETERS SMBPARAMETER; 
SMBPARAMETER.WordCount=12; 
SMBPARAMETER.Words=null; 

SMB_MESSAGE.SMB_DATA SMBDATA; 
SMBDATA.ByteCount=byteCount; 

SMB_MESSAGE.SMB_DATA.Bytes bytes; 
bytes.BufferFormat=bFormat; 
bytes.Name=name; 

Maintenant, quand je regarde dans la valeur de SMBMESSAGE pendant le débogage, il montre NameSpace.Form1.SMB_MESSAGE et pas valeurs à l'intérieur. Je ne peux pas également voir un moyen d'attribuer les valeurs à SMBMESSAGE.
Si nous ne pouvons pas affecter de valeurs, alors pourquoi avons-nous besoin d'utiliser des structures imbriquées?

+0

Votre 'noms de struct' sont horribles. – SLaks

+0

@ SLaks, je voudrais savoir pourquoi? – Simsons

+2

Toutes les majuscules ne doivent jamais être utilisées en C#. Au lieu de cela, vous devriez les nommer quelque chose comme 'Message',' MessageParameter', 'MessageData', et' DataBytes'. – SLaks

Répondre

0

Vos deux structures internes sont imbriquées types, pas les membres d'instance.
Les types imbriqués n'ont aucun effet sur les instances des types parents; ils sont un concept purement organisationnel (sauf qu'ils peuvent accéder aux membres privés du type parent)

Par conséquent, votre structure SMB_MESSAGE n'a aucun membre d'instance.

Vous devez créer quatre structures normales, puis créer deux propriétés en SMB_MESSAGE en conservant les deux autres structures.

Par exemple:

public struct SMB_MESSAGE { 
    public SMB_PARAMETERS Parameters; 
    public SMB_DATA Data; 

} 
public struct SMB_PARAMETERS 
{ 
    public byte WordCount; 
    public ushort[] Words; 
} 

public struct SMB_DATA 
{ 
    public ushort ByteCount; 
    public Bytes Bytes; 
} 
public struct Bytes 
{ 
    public ushort BufferFormat; 
    public byte[] Name; 
} 
+0

Got It, Je me demandais juste alors pourquoi quelqu'un utilisera la structure imbriquée. Dans quel but peuvent-ils être utilisés? – Simsons

+0

Pourquoi cela a-t-il été réduit? – SLaks

+0

@Subhen: http://msdn.microsoft.com/fr-fr/library/ms229027%28v=VS.100%29.aspx – SLaks