【问题标题】:Problems with auto-properties自动属性问题
【发布时间】:2008-12-16 14:09:54
【问题描述】:

这是反射器给出的:

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

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

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

【问题讨论】:

    标签: c#-3.0


    【解决方案1】:

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

    我对自动属性的最大问题是无法创建真正只读属性(带有只读支持字段)。不过,我之前已经对此大喊大叫了……

    【讨论】:

    • 是的,它依赖于字段名称。
    • 没有任何办法不这样做?伊克。正如我所说,这对我来说听起来很脆弱。
    【解决方案2】:

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

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

    2. 类中的字段很明显,您必须检查字段以及属性才能知道类中的字段是什么。如果不使用它们,则只需检查字段区域即可。

    3. 移除了用 readonly、volatile 等修饰底层字段的能力。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-10-29
      • 1970-01-01
      • 1970-01-01
      • 2017-05-28
      • 2011-05-05
      • 1970-01-01
      • 2015-06-05
      相关资源
      最近更新 更多