2010-08-06 46 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