C#字段和属性

之前一直分不清楚字段和属性的合理用法,以及命名规则,现简单整理。

C#的编程准则

标识符的规则:

  • 尽管可以包含数字字符,但它们必须以字母或下划线开头。(而且虽然从语法上看,在标识符中可以使用下划线字符,但大多数情况下最好不要这么做。我个人理解为除了字段命名的首字符使用下划线外,其他命名中都不要使用。)
  • 不能把C#关键字用作标识符。

命名约定(这里主要说明大小写规则):

  • Pascal大小写形式:形如EmployeeSalary,适用于名称空间和类,以及基类中的成员等的名称。
  • Camel大小写形式:形如employeeSalary,适用于①类型中所有私有成员字段的名称,其中成员字段前缀加下划线_,②方法的形参,③属性封装字段中字段的命名。

字段

是与类相关的变量,最好把字段声明为private,使用属性来访问字段。

字段应总是私有的,因为设置成共有不利于以后扩展或修改类。(?)

  • 一般私有的字段写成Camel形式:private string firstName;
  • 和属性成对出现时使用加前缀下划线的Camel形式:private string _firstName;public string { get { return _firstName; } set { _firstName = value; } } 给字段名加上下划线作为前缀,为识别字段而不是局部变量提供极大的便利。(那是不是与类相关的变量叫做类的字段,而无关的叫做局部变量?)
  • 写成公有时使用Pascal形式:public string FirstName;

属性

是一个方法或一对方法,在客户端看来,它是一个字段。

  • 可以向get和set访问器中写方法。
  • 如果get和set访问器中没有任何逻辑,可以使用自动实现的属性:public int Age { get; set; } 编译器会自动创建私有字段,名称不知。初始化写法:public int Age { get; set; } = 42;
  • 可以给属性的get和set访问器设置不用的访问修饰符,但get和set访问器必须至少有一个具备属性的访问级别。public string { get { return _firstName; } private set { _firstName = value; } }

区分使用属性和方法

  • 满足以下所有条件就设置为属性,否则就应使用方法:
  • 客户端代码应能读取它的值。最好不使用只写属性,例如,应使用SetPassword()方法,而不是Password只写属性。
  • 读取该值不应花太长时间。
  • 读取该值不应有任何明显的和不希望的负面效应。
  • 可以按照任何顺序设置属性。
  • 顺序读取属性应有相同的结果。如果属性的值可能会出现预料不到的改变,就应把它编写为一个方法。在监控汽车运动的类中,把speed设置为属性就不合适,而应使用GetSpeed()方法;另一方面,应把Weight和Height设置为属性,因为对于给定的对象,他们是不变的。

参考:C#高级编程(第10版)第2章&第3章

原文地址:https://www.cnblogs.com/zwh1993/p/11263661.html