在构造函数之前调用Setter

时间:2010-03-02 12:21:05

标签: c# silverlight properties

我正在调试代码,发生了一件奇怪的事情。有一个字符串属性说MyProperty。当我在属性的setter和默认构造函数(唯一的构造函数)中添加断点时,首先调用setter。我不知道代码的其他级别发生了什么,但在任何情况下这对我来说都很奇怪。所有成员都是非静态的。该类具有[DataContract]属性,成员为[DataMember]。有人可以解释一下吗?

我无法分享比此更多的代码。此代码也在Silverlight项目中。

1 个答案:

答案 0 :(得分:5)

这是在WCF反序列化期间吗?在WCF反序列化中,根本不调用构造函数。这是设计的。 WCF对象被设计为数据传输对象,并且驻留在setter和getter后面的任何逻辑都是危险的。有可能,你正在看到这种行为并关注它,因为你在业务逻辑中有一些东西存在于setter中。为了解决这个问题,我建议只使用[DataMember]属性来装饰自动属性和字段,这将阻止任何其他逻辑被触发。另外,要注意在构造函数中执行的任何逻辑,在反序列化期间不会执行该逻辑。