C# 获取设置访问器

本文关键字:访问 设置 获取 | 更新日期: 2023-09-27 18:37:13

我有一个奇怪的问题。我正在尝试了解如何正确使用访问器。我得到了将它们与类中的私有和公共变量一起使用的想法,但 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;

所以,我的问题(也许很愚蠢)是使用带有此类公共变量的访问器有什么意义,因为我使用它们与否没有区别?

C# 获取设置访问器

两者之间没有功能差异。但是,public string Telephone; 是一种代码气味,因为它将您的值及其纯数据公开给外界,而不是通过(隐式)访问器。

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

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

对于外界来说,这仍然被用作MyClass.Email,但你可以在它后面添加逻辑,如果你简单地使用字段而不是属性,这是不可能的。