C# C语言中属性之间的差异

C# C语言中属性之间的差异,c#,properties,C#,Properties,我目前正在学习C。我被困在属性的概念上。问题是,以下两个代码是否在功能上等效,如果不是,实现上的区别是什么 代码1 代码2 使用哪种类型的属性表单?它们完全相同,编译器会为您生成支持字段 您还可以从文档中了解更多信息 在C3.0及更高版本中,自动实现的属性使 当不需要额外的逻辑时,属性声明更简洁 在属性访问器中。它们还允许客户端代码创建 物体。当您声明如下所示的属性时 例如,编译器创建一个私有的匿名支持字段 只能通过属性的get和set访问器访问 以前 编译器生成 他们是平等的。Code2是Co

我目前正在学习C。我被困在属性的概念上。问题是,以下两个代码是否在功能上等效,如果不是,实现上的区别是什么

代码1

代码2


使用哪种类型的属性表单?

它们完全相同,编译器会为您生成支持字段

您还可以从文档中了解更多信息

在C3.0及更高版本中,自动实现的属性使 当不需要额外的逻辑时,属性声明更简洁 在属性访问器中。它们还允许客户端代码创建 物体。当您声明如下所示的属性时 例如,编译器创建一个私有的匿名支持字段 只能通过属性的get和set访问器访问

以前

编译器生成


他们是平等的。Code2是Code1的语法糖,主要区别在于第一个代码可以直接访问类中的backing字段,但通常不需要,所以第二个代码基本上意味着编写的代码更少。这不是安全问题。该框架在内部处理私有变量。它们被称为自动属性。如果它没有任何用处,微软就不会引入它。C编译器使用{get;set;}填充其余部分,创建私有字段和方法体。在C语言中有很多语法上的甜点,你可以用手来做,但不需要。
private int ivar;

public int ival {
    get { return ivar; }
    set { ivar = value; }
}
public int ival {
    get; set;
}
public int ival {get; set;}
[CompilerGenerated]
private int <ival>k__BackingField;

public int ival
{
    [CompilerGenerated]
    get
    {
        return <ival>k__BackingField;
    }
    [CompilerGenerated]
    set
    {
        <ival>k__BackingField = value;
    }
}