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循环语句的工作方式不同, 它把元素当作一个集合, 而不是一个数组.

  • 相关阅读:
    说明因 Active Directory 冲突导致的 NTDS 复制警告 ID 1083 和 1061 以及 SAM 错误 ID 12294
    KB817701:可用于解决帐户锁定问题的 Service Pack 和修复程序
    log check
    AD account 锁定问题
    VS.2005 中比较有用的快捷键
    用户帐户意外锁定, 以及 Windows Server 2003 中记录事件 ID 12294
    xp 重新安装MDAC
    [学习收藏]业界三种架构优缺点比较
    [收藏学习]Linux内核虚拟机 学习KVM架构及其优点
    两个命令:hdparm和iozone参数解释
  • 原文地址:https://www.cnblogs.com/technology/p/1711366.html
Copyright © 2011-2022 走看看