是否在规范中实现了自动属性?

时间:2009-07-23 13:16:34

标签: c# .net automatic-properties specifications

我可以依赖这样一个事实:名为Foo的属性的基础字段被称为“k__BackingField”吗?

4 个答案:

答案 0 :(得分:5)

不,简而言之。

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

请参阅:Obfuscation, serialization and automatically implemented properties了解有关此问题的一些想法(以及解决方案)。

答案 1 :(得分:3)

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

您应该调查以查看Mono编译器是否执行相同的操作。

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

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

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

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

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

答案 2 :(得分:0)

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

为什么地球上你想知道?

答案 3 :(得分:0)

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