自动属性的问题

时间:2008-12-16 14:09:55

标签: c#-3.0

这就是反射器给出的:

public int Int1 { get; set; }
public string StringA { get; set; }

// Fields
[CompilerGenerated]
private int <Int1>k__BackingField;
[CompilerGenerated]
private string <StringA>k__BackingField;

问题是C#规范没有明确指定如何命名自动属性的支持字段。 这可能是二进制序列化的问题(来自Nutshell中的C#3.0)。 自动属性还有其他问题吗? MS应该在C#规范中指定吗?

2 个答案:

答案 0 :(得分:1)

我认为MS不应该指定一个名称 - 我认为避免二进制序列化更合理,在我看来这总是有点脆弱。 (Java序列化同样很脆弱。)如果它依赖于字段名称(并且可能有一种方法通过归因于你的属性来解决这个问题 - 我对二进制序列化没有足够的经验知道)那么它已经非常明显地限制了实现的变化

自动属性的最大问题是无法创建真正的只读属性(使用只读后备字段)。我之前已经对此大肆宣传......

答案 1 :(得分:0)

我不喜欢以下关于自动属性的内容:

  1. 无法在自动属性上放置断点。

  2. 类中的字段很明显,您必须检查字段和属性以了解类中的字段。如果不使用它们,那么您可以只检查字段区域。

  3. 删除使用readonly,volatile等装饰基础字段的功能。