我可以依赖这样一个事实:名为Foo的属性的基础字段被称为“k__BackingField”吗?
答案 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)
我不这么认为。如果您需要支持字段,请使用“常规”属性。