2

我可以依赖名为 Foo 的属性的基础字段称为 "k__BackingField" 的事实吗?

4

4 回答 4

5

不,简而言之。

出于这个原因,自动属性在与基于字段的序列化程序一起使用时会很痛苦BinaryFormatter(我相信我之前可能已经提到过;-p)。

请参阅:混淆、序列化和自动实现的属性,以了解对此(和解决方案)的一些想法。

于 2009-07-23T13:20:20.850 回答
3

规范没有指定支持字段的名称(有充分的理由 - 你不应该依赖它)。

例如,您应该调查一下 Mono 编译器是否做同样的事情。

检查该字段是否已CompilerGeneratedAttribute应用的完整性将是一个好主意。

请注意,显式接口实现(当前)将出现:

<Full.Namespace.To.Interface.IBlah.Foo>k__BackingField

因此,试图以这种方式序列化类的特定方面的代码可能会被误导。

如果你想真正了解你的代码,你可以使用像 mono 的 Cecil 这样的库来检查属性的 get 函数并确定使用的字段。

于 2009-07-23T13:47:26.870 回答
0

当然不是。那将是一个私有的实现细节。

你到底为什么想知道?

于 2009-07-23T13:18:50.120 回答
0

我不这么认为。如果您需要支持字段,请使用“常规”属性。

于 2009-07-23T13:19:23.893 回答