C# 请区分c中null get set方法的任意一个#

C# 请区分c中null get set方法的任意一个#,c#,C#,两者的区别是什么 public string UserName { get{return _varUserName;} set{_varUserName = value;} } 及 这些被称为自动属性(或自动实现属性),并在C#3.0中引入 报告说: 在C#3.0及更高版本中,自动实现的属性使 当不需要额外的逻辑时,属性声明更简洁 在属性访问器中。它们还允许客户端代码创建 物体。当您声明如下所示的属性时 例如,编译器创建一个私有的匿名支持字段 只能通过属性的get和set访问器

两者的区别是什么

public string UserName
{
    get{return _varUserName;}
    set{_varUserName = value;}
}


这些被称为
自动属性
(或
自动实现属性
),并在C#3.0中引入

报告说:

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

与文档状态一样,自动属性只是一种比手动定义私有支持字段更简洁的语法


它们允许您在以后需要时创建支持字段。

简短回答:第二个字段更简短,如下所述:


当不需要有关属性值的逻辑时,可以使用缩写版本。

第二种形式是一个。编译器将为您生成支持字段(在您的示例中相当于
\u varUserName
)。您不知道这个生成字段的名称是什么(除非您使用反射),但除此之外,这两个字段在使用上是等效的。

自动属性是一个很容易实现的东西,但它不会让您有机会访问备份字段或添加额外的处理。
当您只需要创建一个类似字段的属性,它只存储一个值并返回它时,请使用auto属性。当您想在getter和setter内部实现一个复杂的过程时,请使用完整声明。

第一个没有编译,因为您没有变量
\u varUserName
。是的,我忘了添加变量的定义。。。第一个例子我知道,但第二个是什么意思?@user3166530这些被称为自动实现的属性。当属性访问器中不需要其他逻辑时,将使用这些逻辑
public string UserName{get;set;}
private String _varUserName //may be you are missing this here

public string UserName
{
    get{return _varUserName;} //set get value to a property
    set{_varUserName = value;}
}
//Auto Implemented property
public string UserName{get;set;} //doing nothing just setting a property