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

      C#的索引器和C++中重写[]运算符的作用相同.

      如果为类定义一个索引器, 就可以告诉编译器, 如果编译器遇到把类实例当作数组的代码, 该怎么办.

      定义索引器的方式与定义属性的方式一样, 也使用get和set函数, 主要的区别是索引器的名称是关键字this, 要为Vector定义索引器, 就可以修改类的定义, 代码如下:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using Microsoft.VisualBasic;

    namespace CSharp_Text
    {
        
    struct Vector
        {
            
    public double x, y, z;

            
    public Vector(double x, double y, double z)
            {
                
    this.x = x;
                
    this.y = y;
                
    this.z = z;
            }
            
    public override string ToString()
            {
                
    return "(" + x + "," + y + "," + z + ")";
            }

            
    public double this[int i]
            {
                
    get
                {
                    
    switch (i)
                    {
                        
    case 0:
                            
    return x;
                        
    case 1:
                            
    return y;
                        
    case 2:
                            
    return z;
                        
    default:
                            
    throw new IndexOutOfRangeException("Attempt to retrieve Vector element" + i);
                    }
                }
                
    set
                {
                    
    switch (i)
                    {
                        
    case 0:
                            x 
    = value;
                            
    break;
                        
    case 1:
                            y 
    = value;
                            
    break;
                        
    case 2:
                            z 
    = value;
                            
    break;
                        
    default:
                            
    throw new IndexOutOfRangeException("Attempt to set Vector element" + i);
                    }
                }
            }
        }
        
    class main
        {
            
    static void Main()
            {
                Vector vect1 
    = new Vector(1-24.1);
                Vector vect2 
    = new Vector();
                Console.WriteLine(
    "vect1 = " + vect1);
                Console.WriteLine(
    "vect1[1] = " + vect1[1]);
                
    for (int i = 0; i < 3; i++)
                {
                    vect2[i] 
    = i;
                }
                Console.WriteLine(
    "vect2 = " + vect2);
            }
        }
    }

    运行结果:

      虽然可以用for, do和while循环来处理索引器, 但不能使用foreach循环. 因为foreach循环语句的工作方式不同, 它把元素当作一个集合, 而不是一个数组.

  • 相关阅读:
    SVN上新增一个项目和用户
    Linux增加swap分区的方法
    FPGA研发之道(25)-管脚
    altera tcl
    信号处理的好书Digital Signal Processing
    每天逛一次官方论坛
    GTS、GCK,GSR全称
    altera tcl
    FPGA组成、工作原理和开发流程
    复杂可编程逻辑器件CPLD的基本结构
  • 原文地址:https://www.cnblogs.com/technology/p/1711366.html
Copyright © 2011-2022 走看看