disable broken tests on net_4_0
[mcs.git] / docs / ecma334 / 8.7.7.xml
blobd3f1949267a6aae6d2ef27d796621bdf41fe7a82
1 <?xml version="1.0"?>
2 <clause number="8.7.7" title="Indexers" informative="true">
3   <paragraph>An indexer is a member that enables an object to be indexed in the same way as an array. Whereas properties enable field-like access, indexers enable array-like access. </paragraph>
4   <paragraph>As an example, consider the Stack class presented earlier. The designer of this class might want to expose array-like access so that it is possible to inspect or alter the items on the stack without performing unnecessary Push and Pop operations. That is, class Stack is implemented as a linked list, but it also provides the convenience of array access. </paragraph>
5   <paragraph>Indexer declarations are similar to property declarations, with the main differences being that indexers are nameless (the &quot;name&quot; used in the declaration is this, since this is being indexed) and that indexers include indexing parameters. The indexing parameters are provided between square brackets. The example <code_example><![CDATA[
6 using System;  
7 public class Stack  
8 {  
9    private Node GetNode(int index) {  
10       Node temp = first;   
11       while (index > 0) {  
12          temp = temp.Next;  
13          index--;  
14       }  
15       return temp;  
16    }  
17    public object this[int index] {  
18       get {  
19          if (!ValidIndex(index))  
20          throw new Exception("Index out of range.");  
21          else  
22          return GetNode(index).Value;  
23       }  
24       set {  
25          if (!ValidIndex(index))  
26          throw new Exception("Index out of range.");  
27          else  
28          GetNode(index).Value = value;  
29       }  
30    }  
31    ...  
32 }  
33 class Test  
34 {  
35    static void Main() {  
36       Stack s = new Stack();  
37       s.Push(1);  
38       s.Push(2);  
39       s.Push(3);  
40       s[0] = 33;  // Changes the top item from 3 to 33  
41       s[1] = 22;  // Changes the middle item from 2 to 22  
42       s[2] = 11;  // Changes the bottom item from 1 to 11  
43    }  
44 }  
45 ]]></code_example>shows an indexer for the Stack class. </paragraph>
46 </clause>