Home > Article > Backend Development > [C# Tutorial] C# Indexer (Indexer)
C# Indexer
Indexer allows an object to be indexed like an array. When you define an indexer for a class, the class behaves like a virtual array. You can access instances of this class using the array access operator ([ ]).
Syntax
The syntax of a one-dimensional indexer is as follows:
element-type this[int index] { // get 访问器 get { // 返回 index 指定的值 } // set 访问器 set { // 设置 index 指定的值 } }
Purpose of Indexer
The declaration of the behavior of an indexer is similar to a property to some extent. Just like properties, you can define indexers using the get and set accessors. However, properties return or set a specific data member, while indexers return or set a specific value of an object instance. In other words, it breaks the instance data into smaller parts and indexes each part, getting or setting each part.
Defining a property includes providing the property name. The indexer is defined without a name, but with the this keyword, which points to the object instance. The following example demonstrates this concept:
using System; namespace IndexerApplication { class IndexedNames { private string[] namelist = new string[size]; static public int size = 10; public IndexedNames() { for (int i = 0; i < size; i++) namelist[i] = "N. A."; } public string this[int index] { get { string tmp; if( index >= 0 && index <= size-1 ) { tmp = namelist[index]; } else { tmp = ""; } return ( tmp ); } set { if( index >= 0 && index <= size-1 ) { namelist[index] = value; } } } static void Main(string[] args) { IndexedNames names = new IndexedNames(); names[0] = "Zara"; names[1] = "Riz"; names[2] = "Nuha"; names[3] = "Asif"; names[4] = "Davinder"; names[5] = "Sunil"; names[6] = "Rubic"; for ( int i = 0; i < IndexedNames.size; i++ ) { Console.WriteLine(names[i]); } Console.ReadKey(); } } }
When the above code is compiled and executed, it produces the following results:
Zara Riz Nuha Asif Davinder Sunil Rubic N. A. N. A. N. A.
Overloading the indexer (Indexer)
The indexer (Indexer) can be overloaded. An indexer can also be declared with multiple parameters, and each parameter can be of a different type. There is no need for the indexer to be integer. C# allows indexers to be of other types, for example, string types.
The following example demonstrates the overloaded indexer:
using System; namespace IndexerApplication { class IndexedNames { private string[] namelist = new string[size]; static public int size = 10; public IndexedNames() { for (int i = 0; i < size; i++) { namelist[i] = "N. A."; } } public string this[int index] { get { string tmp; if( index >= 0 && index <= size-1 ) { tmp = namelist[index]; } else { tmp = ""; } return ( tmp ); } set { if( index >= 0 && index <= size-1 ) { namelist[index] = value; } } } public int this[string name] { get { int index = 0; while(index < size) { if (namelist[index] == name) { return index; } index++; } return index; } } static void Main(string[] args) { IndexedNames names = new IndexedNames(); names[0] = "Zara"; names[1] = "Riz"; names[2] = "Nuha"; names[3] = "Asif"; names[4] = "Davinder"; names[5] = "Sunil"; names[6] = "Rubic"; // 使用带有 int 参数的第一个索引器 for (int i = 0; i < IndexedNames.size; i++) { Console.WriteLine(names[i]); } // 使用带有 string 参数的第二个索引器 Console.WriteLine(names["Nuha"]); Console.ReadKey(); } } }
When the above code is compiled and executed, it will produce the following results:
Zara Riz Nuha Asif Davinder Sunil Rubic N. A. N. A. N. A. 2
The above is the content of [c# tutorial] C# Indexer, more For more related content, please pay attention to the PHP Chinese website (www.php.cn)!