C#类属性用法汇总
属性是对实体特征的抽象,用于提供对类或对象的访问。
类的属性描述的是状态信息,在类的实例中,属性的值表示对象的状态值。
C# 中的属性具有访问器,这些访问器指定在它们的值被读取或写入时需要执行的语句,因此属性提供了一种机制,用于把读取和写入对象的某些特性与一些操作关联起来。
C# 类属性的声明语法格式如下:
重点介绍一下 get 访问器和 set 访问器。
get 访问器相当于一个具有属性类型返回值的无参数方法,它除了作为赋值的目标外,当在表达式中引用属性时,将调用该属性的 get 访问器获取属性的值。
get 访问器体需要用 return 语句来返回,并且所有的 return 语句都必须返回一个可隐式转换为属性类型的表达式。
set访问器相当于一个具有单个属性类型值参数和 void 返回类型的方法。set 访问器的隐式参数始终命名为 value;当一个属性作为赋值的目标被引用时,就会调用 set 访问器,所传递的参数将提供新值。
由于 set 访问器存在隐式的参数 value,因此在 set 访问器中不能自定义名称为 value 的局部变量或常量。
根据是否存在get和set访问器,属性可以分为以下几种:
例如,在飞机类中定义两个代表飞机坐标的属性 X 和 Y,设置这两个属性都是可读可写属性,并且坐标的值必须大于 0,代码如下:
【实例】创建一个控制台应用程序,在默认的 Program 类中定义一个 Age 属性,设置访问级别为 public,因为该属性提供了 get 和 set 访问器,所以它是可读可写属性;然后在该属性的 set 访问器中对属性的值进行控制,控制只能输入 1~130 内的数据,如果输入其他数据,会提示相应的信息。
C# 支持自动实现的属性,即在属性的 get 和 set 访问器中没有任何逻辑,代码如下:
例如在上面的例子中,不能检查输入的年龄是否在 0~130 内;另外,如果要使用自动实现的属性,则必须同时拥有 get 访问器和 set 访问器,只有 get 访问器或者只有 set 访问器的代码会出现错误。
例如,下面的代码是不合法的:
类的属性描述的是状态信息,在类的实例中,属性的值表示对象的状态值。
C# 中的属性具有访问器,这些访问器指定在它们的值被读取或写入时需要执行的语句,因此属性提供了一种机制,用于把读取和写入对象的某些特性与一些操作关联起来。
C# 类属性的声明语法格式如下:
【访问修饰符】【类型】【属性名】 { get {get访问器体} set {set访问器体} }
- 访问修饰符:指定属性的访问级别;
- 类型:指定属性的类型,可以是任何预定义或自定义类型;
- 属性名:一种标识符,命名规则与变量相同,但是属性名的第一个字母通常为大写。
重点介绍一下 get 访问器和 set 访问器。
get 访问器相当于一个具有属性类型返回值的无参数方法,它除了作为赋值的目标外,当在表达式中引用属性时,将调用该属性的 get 访问器获取属性的值。
get 访问器体需要用 return 语句来返回,并且所有的 return 语句都必须返回一个可隐式转换为属性类型的表达式。
set访问器相当于一个具有单个属性类型值参数和 void 返回类型的方法。set 访问器的隐式参数始终命名为 value;当一个属性作为赋值的目标被引用时,就会调用 set 访问器,所传递的参数将提供新值。
由于 set 访问器存在隐式的参数 value,因此在 set 访问器中不能自定义名称为 value 的局部变量或常量。
根据是否存在get和set访问器,属性可以分为以下几种:
- 可读可写属性:包含 get 和 set 访问器。
- 只读属性:只包含 get 访问器。
- 只写属性:只包含 set 访问器。
提示:属性的主要用途是限制外部类对类中成员的访问权限,定义在类级别上。
例如,在飞机类中定义两个代表飞机坐标的属性 X 和 Y,设置这两个属性都是可读可写属性,并且坐标的值必须大于 0,代码如下:
public int X { get { return x; } set { if (x > 0) x = value; } } public int Y { get { return y; } set { if (y > 0) y = value; } }由于属性的 set 访问器中可以包含大量的语句,因此可以对赋予的值进行检查,如果值不安全或者不符合要求,就可以进行处理操作。这样可以避免因为给属性设置了错误的值而导致的异常。
【实例】创建一个控制台应用程序,在默认的 Program 类中定义一个 Age 属性,设置访问级别为 public,因为该属性提供了 get 和 set 访问器,所以它是可读可写属性;然后在该属性的 set 访问器中对属性的值进行控制,控制只能输入 1~130 内的数据,如果输入其他数据,会提示相应的信息。
class Program { private int age; //定义字段 public int Age //定义属性 { get//设置get访问器 { return age; } set//设置set访问器 { if (value > 0 && value < 130)//如果数据合理,将值赋给字段 { age = value; } else { Console.WriteLine("输入数据不合理!"); } } } static void Main(string[] args) { Program p = new Program();//创建Program类的对象 while (true) { Console.Write("请输入年龄:"); p.Age = Convert.ToInt16(Console.ReadLine()); } } }程序运行结果为:
请输入年龄:30
请输入年龄:140
输入数据不合理!
请输入年龄:-10
输入数据不合理!
请输入年龄:
C# 支持自动实现的属性,即在属性的 get 和 set 访问器中没有任何逻辑,代码如下:
public int Age { get; set; }使用自动实现的属性,就不能在属性设置中进行属性的有效验证。
例如在上面的例子中,不能检查输入的年龄是否在 0~130 内;另外,如果要使用自动实现的属性,则必须同时拥有 get 访问器和 set 访问器,只有 get 访问器或者只有 set 访问器的代码会出现错误。
例如,下面的代码是不合法的:
public int Age { get; }