zoukankan      html  css  js  c++  java
  • C# 索引器

    所谓索引器就是一类特殊的属性,通过它们你就可以像引用数组一样引用自己的类。索引器非常类似于我们前面讲到的属性,但索引器可以有参数列表,且只能作用在实例对象上,而不能在类上直接作用。

    索引器和属性有点类似,但却存在着差别如

    1. 属性在类中必须拥有唯一名称,而类中定义的索引器都必须拥有唯一的签名(signature)或者参数列表(索引器重载的实现)。
    2. 属性可以定义为static的,但是索引器去必须在实例化后在可以使用
    3. 为索引器定义的访问函数可以访问传递给索引器的参数,而属性访问函数则没有参数。 

    索引器结构:

    <modifier> <return type> this [argument list]
      ...{
         get
         ...{
           // Get codes goes here
          }
         set
         ...{
           // Set codes goes here
           }
       }

    注:

      modifier:修饰词,如private, public, protected or internal

      this:在C#中this是一个特殊的关键字,它表示引用类的当前实例。在这里它的意思是当前类的索引。

      argument list:这里指索引器的参数。

    class Sample
        {
            public string indexValue;
            public string this[int index]
            {
                get { return string.Format("返回的索引号是:{0}", index); }
                set { indexValue = value; }
            }
    
        }
    

      当然除了类中可以定义索引器外,接口也是可以的,如IList和 IDictionary集合接口都声明了索引器以便访问其存储的项目

      在为接口声明索引器的时候,记住声明只是表示索引器的存在。你只需要提供恰当的访问函数即可,不必包括范围修饰符。以下代码把索引器声明为接口ISample的一部分:

    interface ISample { 
    string this[int index] 
    { 
    get; 
    set; 
    } 
    

      

    相应实现的类则必须为ISample(继承的接口)的索引器具体定义get和set访问函数。 

    class SampleCollection<T>
    {
        private T[] arr = new T[100];
        public T this[int i]
        {
            get
            {
                return arr[i];
            }
            set
            {
                arr[i] = value;
            }
        }
    }
    

      

     

  • 相关阅读:
    SqlServer查询优化方法
    关于导入excel问题
    修改SQL数据库中表字段类型时,报“一个或多个对象访问此列”错误的解决方法
    软件架构之我见
    算法-插入排序
    算法-快速排序
    WCF系列 Restful WCF
    WCF系列 基础概念
    cocos2dx-是男人就坚持20s 练手项目
    nodejs 聊天室简单实现
  • 原文地址:https://www.cnblogs.com/zk2003/p/2978324.html
Copyright © 2011-2022 走看看