我有一个类,在设计时中继按字母顺序序列化的属性是有问题的。换句话说,属性 Z 必须在属性 A 之前序列化。
出现问题是因为属性 Z 会在属性 A 发生更改时清除它——这发生在 InitializeComponent 中。我通过设置 FirstTime 标志来解决这个问题,但这看起来很混乱。
我在这里找到了一个解决方案(翻译自西班牙语),但这似乎有点过头了。
处理问题的正确方法是什么?
我有一个类,在设计时中继按字母顺序序列化的属性是有问题的。换句话说,属性 Z 必须在属性 A 之前序列化。
出现问题是因为属性 Z 会在属性 A 发生更改时清除它——这发生在 InitializeComponent 中。我通过设置 FirstTime 标志来解决这个问题,但这看起来很混乱。
我在这里找到了一个解决方案(翻译自西班牙语),但这似乎有点过头了。
处理问题的正确方法是什么?
这里的最佳实践是重新编写您的类,以便所有设计时属性彼此独立。这就是所有 Microsoft 提供的可设计类型的工作方式。
我之前几乎多次陷入这个陷阱,我总是通过让有趣的相互依赖关系只发生在运行时而不是设计时来解决它。
我是“矫枉过正”解决方案的作者。:-) 如果您不喜欢基于 的解决方案CodeDomSerializer
,我认为您唯一的选择是设计您的类,以便可以按任何顺序初始化属性(无论如何这被认为是好的做法)。例如,如果它是第一次调用它的设置器,你可以让属性 Z 不清除属性 A 吗?就像是:
bool propertyZHasBeenSet=false;
SomeType propertyZ
{
get {
//Property getter
}
set {
if(propertyZHasBeenSet) {
//Clear property A
} else {
propertyZHasBeenSet=true;
}
//The remaining of the property setter
}
}
我相信一定有更好的方法来完成同样的事情,但你明白了。