C#get set accessors

时间:2013-10-27 21:02:38

标签: c# class get set accessor

我有一个奇怪的问题。我正在尝试正确理解如何使用访问者。我想到在类中使用私有和公共变量,但C#3.0允许我们只使用公共变量(即)

public string Email {get; set;}

所以,我正在编写一个应用程序 - 这是我代码的一部分:

public class Customers
{
   public string Telephone;
   public string Email {get; set;}
   public void LoadCustomer(string _name)
   {
       DataSet dataSet = new DataSet();
       dataSet.ReadXml("Customers.xml");


       XDocument doc = XDocument.Load("Customers.xml");
       XElement root = doc.Root;
       for (int i = 0; i < dataSet.Tables[0].Rows.Count; i++)
       {

           var Klient = from wpisy in root.Elements("Customer")
                        where wpisy.Element("Name").Value.Equals(_name)
                        select wpisy;
           Telephone = Klient.First().Element("Telephone").Value;
           Email = Klient.First().Element("Email").Value;

       }
    }
}

private void Window_Loaded_1(object sender, RoutedEventArgs e)
{
    Customers customer = new Customers();
    customer.LoadCustomer(name);
    txt_Telephone.Text = customer.Telephone;
    txt_Email.Text = customer.Email;
}

正如您所看到的,我有一个类和一个方法,在打开窗口时调用该类。每当我使用访问器时,一切都有效:

public string Email {get; set;}

或者我不是:

public string Telephone;

所以,我的问题(也许是愚蠢的)是使用具有这些公共变量的访问器的重点是什么,因为当我使用它们时没有区别?

1 个答案:

答案 0 :(得分:2)

两者之间没有功能差异。但是,public string Telephone;是一个代码,因为它将您的普通数据的值暴露给外部世界,而不是通过(隐式)访问器。

这意味着您永远无法在不破坏现有代码的情况下添加某种类似的验证规则:

private string _email;
public string Email {
 get { return _email }
 set {
  if(value.Contains("@") { _email = value }
 }
}

对于外部世界,它仍被用作MyClass.Email,但你可以添加逻辑,如果你只是使用一个字段而不是一个属性,这是不可能的。