Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在构造函数之前调用Setter_C#_Silverlight_Properties - Fatal编程技术网

C# 在构造函数之前调用Setter

C# 在构造函数之前调用Setter,c#,silverlight,properties,C#,Silverlight,Properties,我正在调试一个代码,发生了一件奇怪的事情。有一个字符串属性,比如MyProperty。当我在属性的setter和默认构造函数(唯一的构造函数)添加断点时,首先调用setter。我不知道在代码的其他级别上发生了什么,但无论如何,这对我来说都很奇怪。所有成员都是非静态的。该类具有[DataContract]属性,成员为[DataMember]。有人能解释一下吗 我不能分享比这更多的代码。代码也在Silverlight项目中。这是在WCF反序列化期间发生的吗?在WCF反序列化中,根本不调用构造函数。那

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


我不能分享比这更多的代码。代码也在Silverlight项目中。

这是在WCF反序列化期间发生的吗?在WCF反序列化中,根本不调用构造函数。那是故意的。WCF对象被设计为数据传输对象,任何驻留在setter和getter后面的逻辑充其量都是危险的。很有可能,您看到这种行为并对此感到担忧,因为您在setter中的业务逻辑中有一些事情正在进行。为了解决这个问题,我建议只使用[DataMember]属性装饰自动属性和字段,这将防止触发任何其他逻辑。另外,要小心构造函数中执行的任何逻辑,该逻辑在反序列化期间不会执行

是否调用了构造函数?您根本不共享任何代码。;)但对我来说,这听起来像是在创建实例之前尝试使用这个类。编写一个小程序来演示这个问题。可能不是你想的那样/那样。现在这几乎不是一个真正的问题。为什么你不能发布构造函数、属性代码和显示问题的代码段?如有必要,您可以更改名称。@Bobby:这会产生空引用异常。哇!这真是令人惊讶,你有任何关于这方面的参考资料吗。我无法想象序列化方案如何不调用构造函数,却通过其mutator方法分配属性值。是的,我猜这是WCF序列化,因为我们使用的是WCF服务。我在setter中添加验证逻辑,如下面的博客,并因此在setter中获得_errorsnull异常。“我怎样才能解决这个问题呢?”安东尼-这是真的。检查数据类的OnDeserialized属性,这就是答案:我想你的意思是说WCF反序列化。