C#2.0新增功能07 getter/setter 单独可访问性

  属性是一种成员,它提供灵活的机制来读取、写入或计算私有字段的值。 属性可用做公共数据成员,但它们其实是称为访问器的特殊方法。 这使得能够轻松访问数据,还有助于提升方法的安全性和灵活性。html

属性概述

  • 属性容许类公开获取和设置值的公共方法,而隐藏实现或验证代码。api

  • get 属性访问器用于返回属性值,而 set 属性访问器用于分配新值。 这些访问器能够具备不一样的访问级别。 有关详细信息,请参阅限制访问器可访问性安全

  • value 关键字用于定义由 set 访问器分配的值。ide

  • 属性能够是读-写属性(既有 get 访问器又有 set 访问器)、只读属性(有 get 访问器,但没有 set 访问器)或只写访问器(有 set 访问器,但没有 get 访问器)。 只写属性不多出现,经常使用于限制对敏感数据的访问。ui

  • 不须要自定义访问器代码的简单属性能够做为表达式主体定义或自动实现的属性来实现。spa

具备支持字段的属性

有一个实现属性的基本模式,该模式使用私有支持字段来设置和检索属性值。 get 访问器返回私有字段的值,set 访问器在向私有字段赋值以前可能会执行一些数据验证。 这两个访问器还能够在存储或返回数据以前对其执行某些转换或计算。rest

下面的示例阐释了此模式。 在此示例中,TimePeriod 类表示时间间隔。 在内部,该类将时间间隔以秒为单位存储在名为 _seconds 的私有字段中。 名为 Hours 的读-写属性容许客户以小时为单位指定时间间隔。 get 和 set 访问器都会执行小时与秒之间的必要转换。 此外,set 访问器还会验证数据,若是小时数无效,则引起 ArgumentOutOfRangeExceptioncode

using System;

class TimePeriod
{
   private double _seconds;

   public double Hours
   {
       get { return _seconds / 3600; }
       set { 
             if (value < 0 || value > 24)
             { 
              throw new ArgumentOutOfRangeException(string.Format("{0}must be between 0 and 24.",nameof(value)));
             }
             _seconds = value * 3600; 
           } 
   } 
} 

class Program 
{ 
  static void Main() 
  { 
    TimePeriod t = new TimePeriod(); // 属性分配致使调用“set”访问器
    t.Hours = 24; // 检索属性会致使调用“get”访问器。
    Console.WriteLine($"Time in hours: {t.Hours}"); 
  } 
} // 输出结果:Time in hours: 24

 

相关文章
相关标签/搜索