1.50. C# indexer

发布时间 : 2025-10-25 13:34:33 UTC      

Page Views: 10 views

The Indexer allows an object to be accessed in the same way as an array using a subscript.

When you define an indexer for a class, the class behaves like a virtual array. You can use arrays to access operators [ ] to access members of this class.

1.50.1. Grammar #

The syntax of an one-dimensional indexer is as follows:

element-type this[int index] { // get accessor get { // returns the value specified by index } // set accessor set { // set the value specified by index } } 

1.50.2. The purpose of the indexer #

The declaration of the indexer’s behavior is somewhat similar to a property.Like property, you can use the get and set accessor to define theindexer. However, the property returns or sets a specific data member, and the indexer returns or sets a specific value for the object instance. In other words, it divides the instance data into smaller parts, indexes each part, and gets or sets each part.

Defining an property includes providing the name of the attribute. Indexers are defined without a name, but with this keyword, which points to the object instance. The following example demonstrates this concept:

Example #

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. 

1.50.3. Overloaded indexer #

The indexer can be overloaded. Indexers can also be declared with multiple parameters, and each parameter can be of a different type. There isno need for indexers to be integer. C# allows indexers to be of other types, such as string types.

The following example demonstrates the overloaded indexer:

Example #

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"; // Using the first indexer with an int parameter for (int i = 0; i < IndexedNames.size; i++) { Console.WriteLine(names[i]); } // Using a second indexer with a string parameter Console.WriteLine(names["Nuha"]); 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. 2 
《地理信息系统原理、技术与方法》  97

最近几年来,地理信息系统无论是在理论上还是应用上都处在一个飞速发展的阶段。 GIS被应用于多个领域的建模和决策支持,如城市管理、区划、环境整治等等,地理信息成为信息时代重要的组成部分之一; “数字地球”概念的提出,更进一步推动了作为其技术支撑的GIS的发展。 与此同时,一些学者致力于相关的理论研究,如空间感知、空间数据误差、空间关系的形式化等等。 这恰好说明了地理信息系统作为应用技术和学科的两个方面,并且这两个方面构成了相互促进的发展过程。