>  기사  >  백엔드 개발  >  C# 학습 일기 28---인덱서, 오버로드된 인덱서

C# 학습 일기 28---인덱서, 오버로드된 인덱서

黄舟
黄舟원래의
2017-01-21 15:39:391316검색

인덱서는 클래스 또는 구조체의 인스턴스가 배열처럼 인덱싱되도록 허용합니다. 클래스에 대한 인덱서를 정의하면 클래스는 배열 접근자 '[]'를 사용할 수 있습니다. 인덱서는 속성과 유사하지만 인덱서는 매개변수를 취합니다. (인덱서도 접근자(특수 메소드)를 통해 구현되는 클래스의 속성이라고 생각할 수도 있습니다.)

좀 더 명확하게 설명하자면, 대학은 인생에서 가장 여유로운 시간입니다. 학생들은 한때 하고 싶었지만 여러 가지 이유로 하지 못했던 많은 일을 할 수 있습니다. .. 수업을 빼먹는 행위를 막기 위해 수업시간마다 선생님은 이름이나 학생번호를 불러요. 저는 4반이에요. 선생님은 학생번호를 '4반 1번'으로 부르는 걸 좋아해요. "에게..." ", "4반 2반", "4반 3반"... "3번. 동창.", "HC666 선생님이 배가 아파서 가셨어요 오늘은 병원." (안녕하세요 차이나. 룸메이트 ^_^), "아, 4번"... 선생님의 점호는 4반의 지표입니다.

class4가 Classes 클래스에 의해 인스턴스화된 객체로 간주되고, class[1]이 동급생 1번의 인덱스인 경우(배열을 생각하면 이해될 것입니다) 그렇다면 어떻게 구현합니까?

인덱서 정의:

위에서 언급한 것처럼 인덱서는 속성과 유사합니다. 당연히 인덱서도 클래스의 구성원이므로 당연히 필요합니다. 다음과 같이 클래스에 정의되어 있어야 합니다.

   public 返回值类型 this[参数类型 参数]  
             {
                                 get { return 参数指定的值;   }    //get访问器
                    set {  /*设置参数指定的值 */    }     //set访问器
            }

인덱서 인스턴스:

위의 예를 다음과 같이 코딩합니다.

using System;  
using System.Collections.Generic;  
using System.Linq;  
using System.Text;  
  
namespace Test1  
{//定义一个能被索引的类  
    class Classes  
    {//对类的索引实质是对类中数组的索引  
       public string[] StudentName=new string[6];  
        //定义索引器  
       public string this[int ID]  
       {  
           get { return StudentName[ID]; }  
           set { StudentName[ID] = value; } //set访问器自带value参数  
         
       }  
      
    }  
    class Program  
    {  
        static void Main(string[] args)  
        {  
            Classes class4 = new Classes();  
            //索引写入  
            for (int i = 1; i < 6; i++)  
            {  
                class4[i] = "HC"+i;  
            }  
            //索引读出  
            for (int j = 1; j < 6; j++)  
            {  
                Console.WriteLine(j+"号\t"+class4[j]);  
            }  
              
        }  
    }  
}

결과 :

C# 학습 일기 28---인덱서, 오버로드된 인덱서

인덱서 오버로드:

위 프로그램에서는 학번을 통해 학생 이름 인덱스를 얻었으므로 학번을 얻는 방법은 무엇입니까? 모직 옷감이라는 이름을 통해 색인을 생성합니까? 우리는 인덱스를 특별한 방법으로 간주합니다. 이 방법은 다양한 매개변수로 동일한 기능을 달성하기 위해 오버로드를 사용할 수 있으므로 인덱서가 자연스럽게 오버로드될 수 있습니다. 사용법은 메소드 오버로딩과 유사합니다(메서드 오버로딩을 보려면 여기를 클릭하세요). 이번에는 이름 인덱스를 사용하여 학생 번호를 가져와야 합니다.

using System;  
using System.Collections.Generic;  
using System.Linq;  
using System.Text;  
  
namespace Test1  
{//定义一个能被索引的类  
    class Classes  
    {//对类的索引实质是对类中数组的索引  
       public string[] StudentName=new string[6];  
        //定义索引器  
       public string this[int ID]  
       {  
           get { return StudentName[ID]; }  
           set { StudentName[ID] = value; } //set访问器自带value参数  
         
       }  
        //重载索引器参数设为string类型  
       public uint this[string name]  
       {  
           get  
           { //找到与name匹配的学号  
               uint index=1;  
               while (StudentName[index] != name && index < 6)  
               { index++; }  
               return index;  
             
           }  
           set { }  
       }  
      
    }  
    class Program  
    {  
        static void Main(string[] args)  
        {  
            Classes class4 = new Classes();  
            //索引写入  
            for (int i = 1; i < 6; i++)  
            {  
                class4[i] = "HC"+i;  
            }  
            //索引读出,通过学号索引出姓名  
            for (int j = 1; j < 6; j++)  
            {  
                Console.WriteLine(j+"号\t"+class4[j]);  
            }  
            //通过姓名索引出学号  
            for (int k = 1; k < 6; k++)  
            {   
                string name="HC"+k;  
                Console.WriteLine(name+"\t"+class4[name]+"号");//对比上面用法一样参数不一样              
            }  
        }  
    }  
}

결과:

C# 학습 일기 28---인덱서, 오버로드된 인덱서

위에서 클래스가 인덱서를 정의하면 클래스가 배열로 처리될 수 있다고 말했습니다. 배열에 대해 배울 때 배열은 여러 차원을 가지며 인덱서는 위치에 있다는 것을 알고 있습니다. 수업은 어떻습니까? ? 배열을 순회하는 데 사용하는 foreach 순회 문을 이 클래스에도 사용할 수 있나요? ? 다음 글에서 소개할게요! ! (학교에 정전이 되니...) 앞으로도 HC666에 많은 응원 부탁드립니다^_^

위는 C# 학습일지 28---인덱서, 오버로드 인덱서 내용입니다. 더 많은 관련 내용은 PHP 중국어 홈페이지(www.php.cn)를 주목해주세요!


성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.