使用C#速记语法时,如何解决字段和属性之间的歧义?
如果没有不匹配或名称完全不同的变量,我无法理解如何使用速记语法 字段和属性之间存在歧义,但是如果我对它们进行不同的命名,我就不能使用缩写get;设置语法。我该如何解决这个问题使用C#速记语法时,如何解决字段和属性之间的歧义?,c#,getter-setter,shorthand,C#,Getter Setter,Shorthand,如果没有不匹配或名称完全不同的变量,我无法理解如何使用速记语法 字段和属性之间存在歧义,但是如果我对它们进行不同的命名,我就不能使用缩写get;设置语法。我该如何解决这个问题 /// <summary> /// A customer object /// </summary> public class Customer { // These are fields private string name; private string address
/// <summary>
/// A customer object
/// </summary>
public class Customer
{
// These are fields
private string name;
private string address;
private string city;
private string province;
private string postalCode;
private string phoneNumber;
private string emailAddress;
// These are properties
public string name { get; set; }
public string address { get; set; }
public string city { get; set; }
public string province { get; set; }
public string postalCode { get; set; }
public string phoneNumber { get; set; }
public string emailAddress { get; set; }
// This is a constructor
public Customer(string Name, string Address, string City, string Province, string PostalCode, string PhoneNumber, string EmailAddress)
{
name = Name; // Cannot determine if name is field or property
address = Address; // Cannot determine if address is field or property
city = City; // Cannot determine if city is field or property
province = Province; // Cannot determine if province is field or property
postalCode = PostalCode; // Cannot determine if postalCode is field or property
phoneNumber = PhoneNumber; // Cannot determine if phoneNumber is field or property
emailAddress = EmailAddress; // Cannot determine if emailAddress is field or property
}
}
//
///顾客对象
///
公共类客户
{
//这些是田地
私有字符串名称;
私有字符串地址;
私人城市;
私人弦省;
专用字符串后代码;
私有字符串电话号码;
私有字符串电子邮件地址;
//这些都是属性
公共字符串名称{get;set;}
公共字符串地址{get;set;}
公共字符串city{get;set;}
公共字符串省{get;set;}
公共字符串postalCode{get;set;}
公共字符串phoneNumber{get;set;}
公共字符串电子邮件地址{get;set;}
//这是一个构造函数
公共客户(字符串名称、字符串地址、字符串城市、字符串省份、字符串邮政编码、字符串电话号码、字符串电子邮件地址)
{
name=name;//无法确定名称是字段还是属性
address=address;//无法确定地址是字段还是属性
city=city;//无法确定city是字段还是属性
省=省;//无法确定省是字段还是属性
postalCode=postalCode;//无法确定postalCode是字段还是属性
phoneNumber=phoneNumber;//无法确定phoneNumber是字段还是属性
emailAddress=emailAddress;//无法确定emailAddress是字段还是属性
}
}
当您声明自动实现的属性时:
public string Name { get; set; }
无需创建支持字段。编译器代表您为属性创建一个隐藏(不可访问)支持字段,该字段只能通过属性的get
和set
访问器访问。你甚至不必去想它
因此,从上面的代码中,只需删除由自动实现的属性复制的字段
声明自动实现的属性时,请参见::
public string Name { get; set; }
无需创建支持字段。编译器代表您为属性创建一个隐藏(不可访问)支持字段,该字段只能通过属性的get
和set
访问器访问。你甚至不必去想它
因此,从上面的代码中,只需删除由自动实现的属性复制的字段
请参阅:当您声明Auto属性时,编译器将为您生成支持字段 当你申报时 公共字符串名称{get;set;} 编译器的代码如下
private string name; //Your backing Field.you don't need it manually.
public string Name
{
get
{
return this.name;
}
set
{
this.name = value;
}
}
声明Auto属性时,编译器将为您生成支持字段 当你申报时 公共字符串名称{get;set;} 编译器的代码如下
private string name; //Your backing Field.you don't need it manually.
public string Name
{
get
{
return this.name;
}
set
{
this.name = value;
}
}
不创建支持字段是不好的做法吗?@Ben:不。公开暴露字段是不好的做法。但是,如果字段的设置和检索没有逻辑(例如,一个简单地设置字段并获取字段的标准属性),C#的设计者认识到需要支持字段的语法冗余,因此,我们创建了一个方便的简写法,无需在代码中显式地编写。如果合适,使用自动道具。编译器给你的错觉是没有支持字段,这是一件好事,因为它消除了代码中不必要的噪音。@Ben:说得清楚,自动道具确实有支持字段。你不需要声明它,也无法访问它,但它仍然存在。不创建备份字段是一种不好的做法吗?@Ben:不。公开暴露字段是一种不好的做法。但是,如果字段的设置和检索没有逻辑(例如,一个简单地设置字段并获取字段的标准属性),C#的设计者认识到需要支持字段的语法冗余,因此,我们创建了一个方便的简写法,无需在代码中显式地编写。如果合适,使用自动道具。编译器给你的错觉是没有支持字段,这是一件好事,因为它消除了代码中不必要的噪音。@Ben:说得清楚,自动道具确实有支持字段。您不需要声明它,也无法访问它,但它仍然存在。