返回首页
当前位置: 主页 > 网络编程 > .Net实例教程 >

C#-索引器

时间:2020-01-22 16:56来源:知行网www.zhixing123.cn 编辑:麦田守望者

 一个分度器允许一个对象作为数组索引这样。为类定义索引器时,该类的行为类似于虚拟数组然后,您可以使用数组访问运算符([])访问此类的实例。

句法

一维索引器具有以下语法-

element-type this[int index] {

   // The get accessor.
   get {
      // return the value specified by index
   }
   
   // The set accessor.
   set {
      // set the value specified by index
   }
}

索引器的使用

索引器行为的声明在某种程度上类似于属性。与属性相似,您可以使用getset访问器来定义索引器。但是,属性返回或设置特定的数据成员,而索引器从对象实例返回或设置特定的值。换句话说,它将实例数据分解为较小的部分并为每个部分建立索引,获取或设置每个部分。

定义属性涉及提供属性名称。索引器不是用名称定义的,而是使用this关键字定义的,关键字引用对象实例。以下示例演示了概念-

现场演示
using System;  namespace IndexerApplication {        class IndexedNames {       private string[] namelist = new string[size];       static public int size = 10;              public IndexedNames() {          for (int i = 0; i < size; i++)          namelist[i] = "N. A.";       }       public string this[int index] {          get {             string tmp;                       if( index >= 0 && index <= size-1 ) {                tmp = namelist[index];             } else {                tmp = "";             }                          return ( tmp );          }          set {             if( index >= 0 && index <= size-1 ) {                namelist[index] = value;             }          }       }       static void Main(string[] args) {          IndexedNames names = new IndexedNames();          names[0] = "Zara";          names[1] = "Riz";          names[2] = "Nuha";          names[3] = "Asif";          names[4] = "Davinder";          names[5] = "Sunil";          names[6] = "Rubic";                    for ( int i = 0; i < IndexedNames.size; i++ ) {             Console.WriteLine(names[i]);          }          Console.ReadKey();       }    } }

编译并执行上述代码后,将产生以下结果-

Zara
Riz
Nuha
Asif
Davinder
Sunil
Rubic
N. A.
N. A.
N. A.

索引器超载

索引器可能会超载。索引器也可以使用多个参数声明,并且每个参数可以是不同的类型。索引不必是整数。C#允许索引具有其他类型,例如字符串。

以下示例演示了重载的索引器-

现场演示
using System;  namespace IndexerApplication {    class IndexedNames {       private string[] namelist = new string[size];       static public int size = 10;              public IndexedNames() {          for (int i = 0; i < size; i++) {             namelist[i] = "N. A.";          }       }       public string this[int index] {          get {             string tmp;                          if( index >= 0 && index <= size-1 ) {                tmp = namelist[index];             } else {                tmp = "";             }                          return ( tmp );          }          set {             if( index >= 0 && index <= size-1 ) {                namelist[index] = value;             }          }       }              public int this[string name] {          get {             int index = 0;                          while(index < size) {                if (namelist[index] == name) {                 return index;                }                index++;             }             return index;          }       }        static void Main(string[] args) {          IndexedNames names = new IndexedNames();          names[0] = "Zara";          names[1] = "Riz";          names[2] = "Nuha";          names[3] = "Asif";          names[4] = "Davinder";          names[5] = "Sunil";          names[6] = "Rubic";                    //using the first indexer with int parameter          for (int i = 0; i < IndexedNames.size; i++) {             Console.WriteLine(names[i]);          }                    //using the second indexer with the string parameter          Console.WriteLine(names["Nuha"]);          Console.ReadKey();       }    } }

编译并执行上述代码后,将产生以下结果-

Zara
Riz
Nuha
Asif
Davinder
Sunil
Rubic
N. A.
N. A.
N. A.
2
------分隔线----------------------------
标签(Tag):
------分隔线----------------------------
推荐内容
  • C#-索引器

    一个 分度器 允许一个对象作为数组索引这样。 为类定义索引器时,该类的行为类似于 虚...

  • C#-反思

    反射 对象用于在运行时获取类型信息。 可以访问正在运行的程序的元数据的类位于 Syste...

  • C#-属性

    一个 属性 是一个用于传递信息至约各种元件等的类,方法,结构,统计员,组件等在你的...

  • C#-文件I / O

    一个 文件 是存储在一个特定的名称和目录路径的磁盘数据的集合。 打开文件进行读取或...

  • C#-异常处理

    例外是在程序执行期间出现的问题。 AC#异常是对程序运行时出现的异常情况的一种响应...

  • C#-预处理程序指令

    预处理器指令向编译器发出指令,以在实际编译开始之前对信息进行预处理。 所有预处理...

猜你感兴趣