2.6C#函数成员之索引器(Indexer)

1.索引器声明

索引器的声明方式与属性相似,格式为索引器名称 this 后跟 分隔符 [ 和 ] 以及单个或多个参数。

value类型 this[key类型 参数名]
{
    //访问器
}
//this指向当前实例
public int this[string key]
{
    get { return storage.Find(key); }
    set { storage.SetAt(key, value); }
}
//Expression-bodied表达式声明法(读写索引器)
using System;
using System.Collections.Generic;

public class Sports
{
   private string[] types = { "Baseball", "Basketball", "Football",
                              "Hockey", "Soccer", "Tennis",
                              "Volleyball" };

   public string this[int i]
   {
      get => types[i];
      set => types[i] = value;
   }
}
//Expression-bodied表达式声明法(只读索引器)
public T this[int i] => arr[i];

2.访问器

类似于属性,索引器分为读写、只读和只写索引器。

//get
var item = someObject["key"];
//set
someObject["AnotherKey"] = item;

3.接口中的索引器

接口访问器不使用修饰符。

接口访问器通常没有实现,仅指示索引器为读写、只读还是只写。可以为接口中定义的索引器提供实现,但这种情况非常少。

public interface ISomeInterface
{
    //...

    // Indexer declaration:
    string this[int index]
    {
        get;
        set;
    }
}

4.重载

索引器支持重载。

索引器的签名由其形参的数目和形参的类型所组成,不包含索引器的类型或形参的名称。

5.修饰符

索引器支持 abstract、new、override、sealed、virtual 修饰符。

原创文章,作者:huoxiaoqiang,如若转载,请注明出处:https://www.huoxiaoqiang.com/csharp/csharplang/8203.html

(0)
上一篇 2021年2月5日 20:01
下一篇 2021年2月6日 11:46

相关推荐

  • 3.8C#引用类型之集合(Collection)

    与数组最大的区别,集合的长度(元素的个数)可以动态改变,可以向集合添加、删除元素 。 1.集合分类 1.1System.Collections.Generic 类 当集合中的所有元素都具有相同的数据类型时,泛型集合会非常有用。 类 说明 元素的顺序 元素重复的值 Dictionary<TKey,TValue&gt…

    C#语言教程 2021年3月8日
    02530
  • 2.2C#数据成员之常量(Constant)

    1.常量声明和初始化 const 字段只能在该字段的声明中初始化,不能用任何构造函数对其赋值,后期也不能修改其值。 常量是隐式的静态常量,所以声明时不需要使用 static 关键字。 常量值可以是C# 内置类型(包括数字、布尔、字符串、null等,不包括  System.Object),不…

    C#语言教程 2021年2月2日
    02180
  • 5.3C#异步编程完整示例

    以下将用”如何烹饪早餐”示例来解释异步: 倒一杯咖啡。 加热平底锅,然后煎两个鸡蛋。 煎三片培根。 烤两片面包。 在烤面包上加黄油和果酱。 倒一杯橙汁。 1.同步代码 同步准备的早餐大约花费了 30 分钟,因为总耗时是每个任务耗时的总和。 这样做早餐花费的时间要长得多,有些食物在上桌之前就已经凉…

    C#语言教程 2021年5月3日
    03180

发表评论

登录后才能评论