索引器怎么用啊?自己做了个小例子,但是所引起不能用?不知道为什么?那位有关于索引器的讲解的或是使用的介绍给俺,俺谢了

解决方案 »

  1.   

    索引器允许类或结构的实例按照与数组相同的方式进行索引。索引器类似于属性,不同之处在于它们的访问器采用参数。它可以使得像数组那样对对象使用下标。它提供了通过索引方式方便地访问类的数据信息的方法。 要声明类或结构上的索引器,请使用this关键字,例如: public int this[int index] //声明索引器 

    // get and set 访问 
    } 索引器的修饰符有:new、public、protected、internal、private、virtual、sealed、override、abstract和extern。当索引器声明包含extern修饰符时,称该索引器为外部索引器。因为外部索引器声明不提供任何实际的实现,所以它的每个访问器声明都由一个分号组成。 索引器的签名由其形参的数量和类型组成。它不包括索引器类型或形参名。如果在同一类中声明一个以上的索引器,则它们必须具有不同的签名。 
    索引器值不归类为变量;因此,不能将索引器值作为ref或out参数来传递。 下面用一个例子来说明如何声明和使用索引器。 在本示例中,定义了一个泛型类,并为其提供了简单的get和set访问器方法(作为分配和检索值的方法)。Program 类为存储字符串创建了此类的一个实例。代码如下: class SampleCollection<T> 

    private T []arr=newT[100]; 
    public T this[inti] 

    get 

    returnarr[i]; 

    set 

    arr[i]=value; 


    } 下面是如何使用上述代码实现的索引器,具体代码示例如下: 
    classProgram 

    staticvoidMain(string[]args) 

    SampleCollection <string> 锁=newSampleCollection<string>(); 
    s[0]="索引器的使用"; 
    System.Console.WriteLine(锁[0]); 

    } C#并不将索引类型限制为整数。例如,对索引器使用字符串可能是有用的。通过搜索集合内的字符串并返回相应的值,可以实现此类的索引器。由于访问器可被重载,字符串和整数版本可以共存。 
      

  2.   

    给楼主一个例子:
    对Button的索引器类:
    public class ButtonIndex
    {
        private ArrayList theButton;
        private  short buttonCount;
        public ButtonIndex()
        {
            theButton = new ArrayList();
            buttonCount = 0;
        }
        public Button this[int i]
        {
            get { return (Button)theButton[i]; }
        }
        public void Add(Button b)
        {
            theButton.Add(b);
            buttonCount += 1;
        }
        public short MyButtonCount
        {
            get { return buttonCount; }
        }
    }页面使用:例如有3个Button要索引:
    ButtonIndex MyButton = new ButtonIndex();
            MyButton.Add(Button1);
            MyButton.Add(Button2);
            MyButton.Add(Button3);至此你可以通过下标来控制3个Button,例如可通过循环来设置Button的颜色:
            for (int i = 0; i < MyButton.MyButtonCount; i++)
            {
                 MyButton[i].BackColor = System.Drawing.Color.Blue;
            }你也可以创建这三个Button共同的Click事件,如下:
            //创建索引后Button的事件
            for (int i = 0; i < MyButton.MyButtonCount; i++)
                MyButton[i].Click += new EventHandler(MyButton_Click);        //索引后Button对应的事件
            private void MyButton_Click(object sender, EventArgs e)
            {
            }