使用空属性设置器时引发Visual Studio警告

我需要创建一个Serializable类 . 在这个类中,我有一个MyGuid只读属性,我想要可序列化但不可反序列化(属性在后备字段中初始化) . 使用基本序列化.NET功能,你知道,有一个reandonly属性使反序列化失败,因为它不能反序列化readonly属性 . 因此,我决定使用支持字段创建一个公共get-set MyGuid属性,并使setter不执行任何操作:

[Serializable]
public class Task : ITask
{
    private readonly Guid m_guid = Guid.NewGuid();
    public MyGuid Guid
    {
        get { return m_guid; }
        set { /*Empty setter!*/ }
    }
}

现在我不想在我的脚下射击......有一种方法可以让MyGuid属性的设置者“弃用”或“禁用”?如果我尝试使用setter,Visual Studio警告我会很好 .

或者,有一种更好的方法来管理这种需求?

谢谢!

Edit: 在这里找到了一些东西:Serializing private member data我正在读......

回答(2)

2 years ago

public Guid Guid
{
    get { return m_guid; }
    set { if (value != null) Debugger.Log(0, "Warning", "This property has an empty setter, just for serializing purpose!"); }
}

如果您不小心自行设置了该值,则会在调试窗口中收到警告 . 另一方面,你绝对需要序列化器的setter,否则解串器永远不能在从文件中读取属性后指定属性值!所以setter不适合你,但序列化器正常运行 .

2 years ago

如果你不包括该套装,它将自动知道它的只读,所以不会让你设置它 . 然后,当您尝试时,它会标记代码中的错误