Indexer ist ein spezielles Klassenmitglied, das den Zugriff auf Objekte auf Array-ähnliche Weise ermöglicht, wodurch das Programm intuitiver und einfacher zu schreiben ist.
1. Definition des Indexers
Klassenmitglieder in C# können jeden Typ haben, einschließlich Arrays und Sammlungen. Wenn eine Klasse Array- und Sammlungsmitglieder enthält, vereinfachen Indexer den Zugriff auf Array- oder Sammlungsmitglieder erheblich.
Die Art und Weise, einen Indexer zu definieren, ähnelt in gewisser Weise der Definition eines Attributs. Seine allgemeine Form ist wie folgt: Wenn indexer //this das Array oder Sammlungsmitglied darstellt, das dieses Objekt betreibt, kann es einfach als Name des verstanden werden Wenn sie also vom gleichen Typ sind, denken Sie daran, sie anhand der Parameter zu unterscheiden.
//[修饰符] 数据类型 this[索引类型 index] { get{//获得属性的代码} set{ //设置属性的代码} }
Wie zum Beispiel
public int this [int index] { get{} set{} }
Die spezifischen Beispiele sind wie folgt:
class Z { //可容纳100个整数的整数集 private long[] arr = new long[100]; //声明索引器 public long this[int index] { get { //检查索引范围 if (index < 0 || index <= 100) { return 0; } else { return arr[index]; } } set { if (!(index < 0 || index <= 0)) { arr[index] = value; } } }
2. Verwendung des Indexers
Auf Instanzen von Klassen kann zugegriffen werden durch Indexer Die Operationsmethode von Array-Mitgliedern ähnelt der von Arrays. Die allgemeine Form lautet wie folgt:
Objektname [Index]
Zu den Modifikatoren gehören öffentlich, geschützt, privat, intern, neu, virtuell, versiegelt und überschrieben , abstract, extern, where index Der Datentyp von muss mit dem Indextyp des Indexers identisch sein. Zum Beispiel:
Z z=new z(); z[0]=100; z[1]=101; Console.WriteLine(z[0]);//表示先创建一个对象z,再通过索引来引用该对象中的数组元素。
3. Indexer in der Schnittstelle
Sie können auch den Indexer in der Schnittstelle deklarieren. Es gibt zwei Unterschiede zwischen Schnittstellenindexer und Klassenindexer: Erstens wird der Schnittstellenindexer nicht verwendet. Der Schnittstellenindexer enthält nur den Accessor get oder set und es gibt keine Implementierungsanweisung. Der Zweck des Accessors besteht darin, anzugeben, ob der Indexer schreibgeschützt, schreibgeschützt oder schreibgeschützt ist. Wenn er schreibgeschützt ist, kann weder der Get- noch der Set-Accessor weggelassen werden Der Accessor wird weggelassen. Wenn er nur schreibbar ist, lassen Sie den Get-Accessor weg.
Zum Beispiel:
public interface IAddress { string this[int index]{get;set;} string Address{get;set;} string Answer(); }
gibt an, dass die deklarierte Schnittstelle IAddress drei Mitglieder enthält: einen Indexer, eine Eigenschaft und eine Methode, wobei der Indexer lesbar und beschreibbar ist.
4. Vergleich von Indexern und Attributen
Indexer und Attribute sind beide Mitglieder von Klassen und haben eine sehr ähnliche Syntax. Die Verwendung von Indexern zum Betreiben von Sammlungsobjekten ist im Allgemeinen so einfach wie die Verwendung von Array-Eigenschaften in jeder benutzerdefinierten Klasse, was die Flexibilität der Feldmitglieder der Klasse erhöht.
Vertiefteres Verständnis von C#-Indexern (eine Eigenschaft, die Parameter unterstützt) und Eigenschaften Für vergleichsbezogene Artikel achten Sie bitte auf die chinesische PHP-Website!