У меня есть структура в C #, определенная следующим образом (упрощенная для демонстрационных целей), которую я использую при вызовах взаимодействия с собственной DLL:
[StructLayout(LayoutKind.Sequential, Pack=1)]
public struct MyStruct
{
private byte val0;
private byte val1;
private byte val2;
private byte val3;
public MyStruct(UInt32 id)
{
this.val0 = (byte)id;
id >>= 8;
this.val1 = (byte)id;
id >>= 8;
this.val2 = (byte)id;
id >>= 8;
this.val3 = (byte)id;
}
public void Clear()
{
this.val0 = this.val1 = this.val2 = this.val3 = 0;
}
public override string ToString()
{
return
this.val3.ToString("X2") + this.val2.ToString("X2") + "-" +
this.val1.ToString("X2") + this.val0.ToString("X2");
}
}
Обновление: Эта структурасвойство в другом классе.Следующее:
public class MyClass
{
MyStruct MyStruct { get; set; }
}
Когда я создаю экземпляр структуры со значением и следую за этим при вызове Clear (), содержимое не очищается.Когда я вхожу в метод Clear () с отладчиком, я вижу, что каждое поле очищается.Тем не менее, после завершения вызова Clear () исходный экземпляр структуры остается неизменным со своими первоначально созданными значениями.
MyClass class1 = new MyClass();
class1.MyStruct = new MyStruct(0x12345678);
System.Diagnostics.Debug.WriteLine("Init: " + class1.MyStruct.ToString());
class1.MyStruct.Clear();
System.Diagnostics.Debug.WriteLine("Clear: " + class1.MyStruct.ToString());
Приведенный выше результат приводит к следующему выводу:
Init: 1234-5678
Очистить: 1234-5678
Почему это так?Можно ли очистить структуру после ее создания?
Редактировать: Пример кода и результаты можно увидеть здесь: http://ideone.com/6szn9
Редактировать: Пересмотренный вопрос, чтобы более точно отразить проблему, связанную с объектом доступа.