2010-08-06 86 views
0

嗨,我已經在C#中編寫了一個嵌套結構。請看下面的代碼片段:如何將值分配給嵌套結構中的主/父結構?

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 

     } 

現在雖然我賦值給內部結構如下圖所示:

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; 

現在,當我看着SMBMESSAGE的價值,同時調試它顯示NameSpace.Form1.SMB_MESSAGE無裏面的值。我也看不到一種方法來將值設置爲SMBMESSAGE
如果我們不能分配值,那麼爲什麼我們需要使用嵌套結構?

+0

你'struct'名稱是太可怕了。 – SLaks 2010-08-06 05:35:26

+0

@SLaks,我想知道爲什麼? – Simsons 2010-08-06 05:37:53

+2

絕對不應該在C#中使用全部大寫。相反,您應該將它們命名爲Message,MessageParameter,MessageData和DataBytes。 – SLaks 2010-08-06 05:41:29

回答

0

您的兩個內部結構嵌套類型,而不是實例成員。
嵌套類型對父類型的實例沒有影響;他們是一個純粹的組織概念(除了他們可以訪問父類型的私有成員)

因此,您的SMB_MESSAGE結構實際上並沒有任何實例成員。

您需要製作四個標準結構,然後在SMB_MESSAGE中設置兩個屬性來保存其他兩個結構。

例如:

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

得到它,只是想知道爲什麼任何人會使用嵌套結構。他們可以用於哪些目的? – Simsons 2010-08-06 05:34:09

+0

爲什麼這會降低投票率? – SLaks 2010-08-06 05:41:02

+0

@Subhen:http://msdn.microsoft.com/en-us/library/ms229027%28v=VS.100%29.aspx – SLaks 2010-09-14 12:54:44