索引器和属性(C# 编程指南)

索引器

索引器允许类或结构的实例按照与数组相同的方式进行索引。索引器类似于属性,不同之处在于它们的访问器采用参数。

在下面的示例中,定义了一个泛型类,并为其提供了简单的 getset 访问器方法(作为分配和检索值的方法)。Program 类为存储字符串创建了此类的一个实例。

 1class SampleCollection<T>
 2{
 3    private T[] arr = new T[100];
 4    public T this[int i]
 5    {
 6        get
 7        {
 8            return arr[i];
 9        }

10        set
11        {
12            arr[i] = value;
13        }

14    }

15}

16
17// This class shows how client code uses the indexer
18class Program
19{
20    static void Main(string[] args)
21    {
22        SampleCollection<string> stringCollection = new SampleCollection<string>();
23        stringCollection[0= "Hello, World";
24        System.Console.WriteLine(stringCollection[0]);
25    }

26}

27

 

索引器概述

  • 索引器使得对象可按照与数组相似的方法进行索引。

  • get 访问器返回值。set 访问器分配值。

  • this 关键字用于定义索引器。

  • value 关键字用于定义由 set 索引器分配的值。

  • 索引器不必根据整数值进行索引,由您决定如何定义特定的查找机制。

  • 索引器可被重载。

  • 索引器可以有多个形参,例如当访问二维数组时。

属性

属性是这样的成员:它们提供灵活的机制来读取、编写或计算私有字段的值。可以像使用公共数据成员一样使用属性,但实际上它们是称为“访问器”的特殊方法。这使得数据在可被轻松访问的同时,仍能提供方法的安全性和灵活性。

在本示例中,类 TimePeriod 存储了一个时间段。类内部以秒为单位存储时间,但提供一个称为 Hours 的属性,它允许客户端指定以小时为单位的时间。Hours 属性的访问器执行小时和秒之间的转换。

 示例:

class TimePeriod
{
    
private double seconds;

    
public double Hours
    
{
        
get return seconds / 3600; }
        
set { seconds = value * 3600; }
    }

}


class Program
{
    
static void Main()
    
{
        TimePeriod t 
= new TimePeriod();

        
// Assigning the Hours property causes the 'set' accessor to be called.
        t.Hours = 24;

        
// Evaluating the Hours property causes the 'get' accessor to be called.
        System.Console.WriteLine("Time in hours: " + t.Hours);
    }

}

 

输出

   Time in hours: 24

  • 属性使类能够以一种公开的方法获取和设置值,同时隐藏实现或验证代码。

  • get 属性访问器用于返回属性值,而 set 访问器用于分配新值。这些访问器可以有不同的访问级别。有关更多信息,请参见访问器可访问性

  • value 关键字用于定义由 set 索引器分配的值。

  • 不实现 set 方法的属性是只读的。

 

索引器和属性之间的比较

属性

索引器

允许调用方法,如同它们是公共数据成员。

允许调用对象上的方法,如同对象是一个数组。

可通过简单的名称进行访问。

可通过索引器进行访问。

可以为静态成员或实例成员。

必须为实例成员。

属性的 get 访问器没有参数。

索引器的 get 访问器具有与索引器相同的形参表。

属性的 set 访问器包含隐式 value 参数。

除了 value 参数外,索引器的 set 访问器还具有与索引器相同的形参表。

 

 

posted on 2009-02-11 08:21  小林子!  阅读(1008)  评论(2编辑  收藏  举报

金山词霸网页划词