Heim  >  Artikel  >  Backend-Entwicklung  >  Detaillierte Einführung in Indexer in C#

Detaillierte Einführung in Indexer in C#

黄舟
黄舟Original
2017-05-07 10:32:491299Durchsuche

Indexer (Indexer) ist ein neuer Typ von Klassenmitglied, der von C# eingeführt wurde und das Objekt kann mit ebenso bequem und intuitiv referenziert werden wie mit Array. Indexer sind Eigenschaften sehr ähnlich, Indexer können jedoch Parameterlisten haben und nur auf Instanzobjekte reagieren, nicht direkt auf Klassen. Mit einer Klasse, die einen Indexer definiert, können Sie wie auf ein Array darauf zugreifen [ ] Operator greift auf Mitglieder einer Klasse zu. (Natürlich gibt es viele erweiterte Anwendungen, z. B. das Zuordnen von Arrays über Indexer usw.)

Indexer ermöglichen die Indizierung von Instanzen einer Klasse oder Struktur genau wie ein Array. Indexer ähneln Eigenschaften, außer dass ihre Werte Funktionen Parameter annehmen. Indexer ermöglichen die Indizierung von Instanzen von Klassen oder Strukturen auf die gleiche Weise wie Arrays, mit der Ausnahme, dass der Indexerzugriff Parameter erfordert.

Indexer-Übersicht

  • Verwenden Sie Indexer, um Objekte arrayartig zu indizieren.

  • get-Funktion gibt den Wert zurück.

    set Die Wertfunktion weist einen Wert zu.

  • Dieses Schlüsselwort wird verwendet, um den Indexer zu definieren.

  • Das Schlüsselwort value wird verwendet, um den vom Set-Indexer zugewiesenen Wert zu definieren.

  • Der Indexer muss nicht auf der Grundlage des

    Ganzzahlwerts indizieren; es liegt an Ihnen, den spezifischen Suchmechanismus zu definieren.

  • Indexer können

    überlastet sein.

  • Der Indexer kann mehrere formale Parameter haben, beispielsweise beim Zugriff auf ein

    zweidimensionales Array.

Indexer- und Array-Vergleich:

(1) Der Indexwerttyp (Index) des Indexers ist nicht eingeschränkt

(2) Der Indexer ermöglicht Überladung

(3) Der Indexer ist keine Variable

Indexer-Unterschiede aus Attributen

(1) Attribute werden durch Namen identifiziert, und Indexer werden durch Funktionen identifiziert

(2) Indexer können überlastet werden, Eigenschaften können nicht

(3) Indexer können nicht als statisch, Attribute können sein:

Ein einfaches Indexerbeispiel

using System;
using System.Collections;

public class IndexerClass
{
    private string[] name = new string[2];

    //索引器必须以this关键字定义,其实这个this就是类实例化之后的对象
    public string this[int index]
    {
        //实现索引器的get方法
        get
        {
            if (index < 2)
            {
                return name[index];
            }
            return null;
        }

        //实现索引器的set方法
        set
        {
            if (index < 2)
            {
                name[index] = value;
            }
        }
    }
}
public class Test
{
    static void Main()
    {
        //索引器的使用
        IndexerClass Indexer = new IndexerClass();
        //“=”号右边对索引器赋值,其实就是调用其set方法
        Indexer[0] = "张三";
       Indexer[1] = "李四";
        //输出索引器的值,其实就是调用其get方法
        Console.WriteLine(Indexer[0]);
       Console.WriteLine(Indexer[1]);
    }
}


Verwenden Sie die -Zeichenfolge als Index, um auf den Indexer zuzugreifen

public class IndexerClass
{
    //用string作为索引器下标的时候,要用Hashtable
    private Hashtable name = new Hashtable();

    //索引器必须以this关键字定义,其实这个this就是类实例化之后的对象
    public string this[string index]
    {
        get { return name[index].ToString(); 
        set { name.Add(index, value); }
    }
}
public class Test
{
    static void Main()
    {
        IndexerClass Indexer = new IndexerClass();
        Indexer["A0001"] = "张三";
        Indexer["A0002"] = "李四";
        Console.WriteLine(Indexer["A0001"]);
        Console.WriteLine(Indexer["A0002"]);
    }
}

Überladung von Indexer

public class IndexerClass
{
    private Hashtable name = new Hashtable();

    //1:通过key存取Values
    public string this[int index]
    {
        get { return name[index].ToString(); }
        set { name.Add(index, value); }
    }

    //2:通过Values存取key
    public int this[string aName]
    {
        get
        {
            //Hashtable中实际存放的是DictionaryEntry(字典)类型,如果要遍历一个Hashtable,就需要使用到DictionaryEntry
            foreach(DictionaryEntry d in name)
            {
                if (d.Value.ToString() == aName)
                {
                    return Convert.ToInt32(d.Key);
                }
            }
            return -1;
        }
        set
        {
            name.Add(value, aName);
        }
    }
}
public class Test
{
    static void Main()
    {
        IndexerClass Indexer = new IndexerClass();

        //第一种索引器的使用
        Indexer[1] = "张三";//set访问器的使用
        Indexer[2] = "李四";
       Console.WriteLine("编号为1的名字:" + Indexer[1]);//get访问器的使用
        Console.WriteLine("编号为2的名字:" + Indexer[2]);

        Console.WriteLine();
        //第二种索引器的使用
        Console.WriteLine("张三的编号是:" + Indexer["张三"]);//get访问器的使用
        Console.WriteLine("李四的编号是:" + Indexer["李四"]);
       Indexer["王五"] = 3;//set访问器的使用
        Console.WriteLine("王五的编号是:" + Indexer["王五"]);
    }
}

Multiparameter-Indexer

Das obige ist der detaillierte Inhalt vonDetaillierte Einführung in Indexer in C#. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn