我有一个类似于UInt16的类。因此,我没有使用:UInt16 myProp,而是使用Address myProp,它更具描述性。
这是一个片段:
public class Address
{
public UInt16 address { get; set; }
private static UInt16 add;
public static implicit operator UInt16(Address address)
{
return add;
}
public static implicit operator Address(UInt16 i)
{
Address temp = new Address(i);
return temp;
}
public Address(UInt16 value)
{
address = value;
add = value;
}
public Address() { }
}
然后我有一个属性: public Address myAddress {get;组; }
其余代码完美无缺。
此类需要序列化并反序列化为xml。
序列化后,我的xml
<myAddress>
<address>7</address>
</myAddress>
但是在我清除了xml文件之后,我无法将myAddress属性恢复为7。
也许是一个奇怪的问题......任何想法?
答案 0 :(得分:2)
您的转化运算符返回UInt16
已损坏 - 它使用静态变量,该变量将根据最近构建的值进行设置。您是否认为忽略传递给转换运算符的值并不奇怪?
目前尚不清楚为什么你会得到静态变量,但我强烈怀疑你应该摆脱它,你的转换操作符应该是:
public static implicit operator UInt16(Address address)
{
return address.address;
}
您还应该重命名该属性以遵循.NET命名约定...并且最好还是更改名称,因为Address
类型也有Address
属性< / em>的。这种类型无论如何都不清楚是什么意思,但也许Value
至少会稍好一些?