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序列化也很脆弱。)如果它依赖于字段名(可能有一种方法可以通过属性来绕过这个问题——我对二进制序列化的经验还不够丰富,所以不知道),那么它已经很不自然地限制了实现更改
我对自动属性的最大问题是,无法创建真正的只读属性(使用只读支持字段)。我以前也说过这一点…我不喜欢以下关于汽车属性的内容:
我不喜欢以下关于自动属性的内容:
是的,它依赖于字段名。没有任何方法不这样做吗?哎呀。正如我所说,这听起来很脆弱。是的,它依赖于字段名。没有任何方法不这样做吗?哎呀。正如我所说,这听起来很脆弱。