Как присвоить значение основной / родительской структуре во вложенной структуре? - PullRequest
0 голосов
/ 06 августа 2010

Привет, я написал вложенную структуру в 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.
Если мы не можем присваивать значения, то зачем нам использовать вложенные структуры?

1 Ответ

0 голосов
/ 06 августа 2010

Ваши две внутренние структуры являются вложенными типами , а не членами экземпляра.
Вложенные типы не влияют на экземпляры родительских типов; это чисто организационная концепция (за исключением того, что они могут получить доступ к закрытым членам родительского типа)

Следовательно, ваша структура 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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...