【发布时间】:2011-03-25 04:24:29
【问题描述】:
我在 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());
以上结果如下:
初始化:1234-5678
清除:1234-5678
这是为什么?实例化后可以清除结构吗?
编辑: 示例代码和结果可以在这里看到:http://ideone.com/6szn9
编辑:修改问题以更准确地反映与属性访问器相关的问题。
【问题讨论】: