0

我有一个设计为像 UInt16 一样执行的类。因此,我可以使用 Address myProp,而不是这样做:UInt16 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。

也许是一个奇怪的问题......有什么想法吗?

4

1 回答 1

2

您返回的转换运算符UInt16已损坏 - 它正在使用静态变量,该变量将由最近构造的任何值设置。您是否认为忽略传递给转换运算符的值很奇怪?

目前尚不清楚为什么你有静态变量,但我强烈怀疑你应该摆脱它,你的转换运算符应该是:

public static implicit operator UInt16(Address address)
{
    return address.address;
}

您还应该重命名属性以遵循 .NET 命名约定......并且无论如何最好更改名称,因为一个Address类型也有一个Address 属性是很奇怪的。无论如何,还不清楚该类型要代表什么,但也许Value至少会好一些?

于 2013-07-17T21:35:26.493 回答