C#索引器-示例代码

using System;

public class Photo //这个类是一个相片类
{
private string _title; //相片标题
//先定义默认构造函数
public Photo()
{
    //初始化相片标题的构造方法
    _title = "我是张三";
}
public Photo(string title)
{
    //初始化相片标题的构造方法
    _title = title;
}
public string Title
{
    //属性
    get
    {
      return _title;
    }
}
}

public class Album
{
//相册类
Photo[]photos; //用于存放照片的数组
public Album()
{
    //初始化相册大小
    photos = new Photo[3];
}
public Album(int capacity)
{
    //初始化相册大小
    photos = new Photo[capacity];
}
//下面定义索引用于检索照片信息,带有int参数的Photo索引器
public Photo this[int index]
{
    get //get方法用于根据索引从索引器中获取照片
    {
      if (index < 0 || index >= photos.Length)
      //有效的索引
      {
        Console.WriteLine("索引无效");
        return null;
      }
      else
      {
        return photos[index];
      }
    }
    set
    {
      if (index < 0 || index >= photos.Length)
      {
        Console.WriteLine("索引无效");
        return ; //set 无返回 所以 return 就可以了。因为这里定义的是Photo类型,不是void类型。必写返回
      }
      else
      {
        photos[index] = value;
      }
    }
}
//根据标题检索照片,但不能根据标题赋值,设置为只读索引。带有string参数的Photo索引器。
public Photo this[string title]
{
    get
    {
      //遍历数组中所有照片
      foreach (Photo p in photos)
      {
        if (p.Title == title)
        //判断
          return p;
      }
      Console.WriteLine("没有该照片");
      return null;
//使用null指示失败
    }
}
}

class Test
{
static void Main(string[]arsg)
{
    Album friends = new Album(3); //创建相册大小为3
    //创建3张照片
    Photo first = new Photo("逍遥");
    Photo second = new Photo("太子");
    Photo third = new Photo("姚佳");
    friends[0] = first;
    friends[1] = second;
    friends[2] = third;
    //按照索引进行查询
    Photo objPhoto = friends[2];
    Console.WriteLine(objPhoto.Title);
    //按名称进行检查
    Photo obj2Photo = friends["太子"];
    Console.WriteLine(obj2Photo.Title);
}
}

定义索引器的时候使用this关键字,get和set访问器和属性的访问器相同,索引器和数组的属性有点相似,只是数组只通过索引检索,而索引器可以通过重载,自定义访问方式。

注意:将数组作为对象对待更加直观时,才使用索引器。

没有更多推荐了,返回首页