使用C#简写语法时,如何解决字段和属性之间的歧义?

时间:2016-03-03 02:20:15

标签: c# getter-setter shorthand

我无法弄清楚如何使用简写语法而不会有不匹配的变量或完全不同的名称。

字段和属性之间存在歧义,但如果我将它们命名为不同,我就无法使用速记获取;组;句法。我该如何解决这个问题?

/// <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
    }
}

2 个答案:

答案 0 :(得分:3)

声明自动实现的属性时:

public string Name { get; set; } 

创建支持字段不一定。编译器代表您为该属性创建一个隐藏(不可访问)的支持字段,只能 通过该属性get和{{ 1}}访问者。你不必考虑它。

因此,从上面的代码中,只需删除由自动实现的属性复制的字段。

请参阅:https://msdn.microsoft.com/en-us/library/bb384054.aspx

答案 1 :(得分:1)

声明自动属性时,编译器会为您生成支持字段。

即。当你宣布

  

public string Name {get;组; }

编译器会有像

这样的代码
private string name; //Your backing Field.you don't need it manually.
 public string Name
 {
    get
    {
        return this.name;
    }
    set
    {
        this.name = value;
    }
}
相关问题