C# 3.0 自动属性的问题

C# 3.0 自动属性的问题,c#-3.0,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; public int Int1{get;set;} 公共字符串St

这就是反射器提供的:

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

// Fields
[CompilerGenerated]
private int <Int1>k__BackingField;
[CompilerGenerated]
private string <StringA>k__BackingField;
public int Int1{get;set;}
公共字符串StringA{get;set;}
//田地
[编译生成]
私人内特库尤后台;
[编译生成]
私有字符串k__BackingField;
问题在于C#规范没有明确指定自动属性的支持字段的命名方式。 这可能是二进制序列化的一个问题(简而言之,来自C#3.0一书)。
自动属性还有其他问题吗?MS是否应该在C#specs中指定这一点?

我认为MS不应该指定名称-我认为避免二进制序列化更合理,因为在我看来,二进制序列化总是有点脆弱。(Java序列化也很脆弱。)如果它依赖于字段名(可能有一种方法可以通过属性来绕过这个问题——我对二进制序列化的经验还不够丰富,所以不知道),那么它已经很不自然地限制了实现更改


我对自动属性的最大问题是,无法创建真正的只读属性(使用只读支持字段)。我以前也说过这个…

我认为MS不应该指定一个名称-我认为避免二进制序列化更合理,在我看来,二进制序列化总是有点脆弱。(Java序列化也很脆弱。)如果它依赖于字段名(可能有一种方法可以通过属性来绕过这个问题——我对二进制序列化的经验还不够丰富,所以不知道),那么它已经很不自然地限制了实现更改


我对自动属性的最大问题是,无法创建真正的只读属性(使用只读支持字段)。我以前也说过这一点…

我不喜欢以下关于汽车属性的内容:

  • 无法在自动特性上放置断点

  • 类中的字段很明显,您必须检查字段以及属性,以了解类中的字段是什么。如果未使用这些字段,则只需检查字段区域

  • 删除用只读、易失性等修饰底层字段的功能


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

  • 无法在自动特性上放置断点

  • 类中的字段很明显,您必须检查字段以及属性,以了解类中的字段是什么。如果未使用这些字段,则只需检查字段区域

  • 删除用只读、易失性等修饰底层字段的功能


  • 是的,它依赖于字段名。没有任何方法不这样做吗?哎呀。正如我所说,这听起来很脆弱。是的,它依赖于字段名。没有任何方法不这样做吗?哎呀。正如我所说,这听起来很脆弱。