An interface can specify an indexer. A one-dimensional indexer declared in an interface has this general form:
// interface indexer element-type this[int index] { get; set; }
As before, only get or set will be present for read-only or write-only indexers, respectively.
Here is another version of ISeries that adds a read-only indexer that returns the i-th element in the series:
// Add an indexer in an interface. using System; public interface ISeries { // an interface property int next { get; // return the next number in series set; // set next number } // an interface indexer int this[int index] { get; // return the specified number in series } } // Implement ISeries. class ByTwos : ISeries { int val; public ByTwos() { val = 0; } // get or set value using a property public int next { get { val += 2; return val; } set { val = value; } } // get a value using an index public int this[int index] { get { val = 0; for(int i=0; i<index; i++) val += 2; return val; } } } // Demonstrate an interface indexer. class SeriesDemo4 { public static void Main() { ByTwos ob = new ByTwos(); // access series through a property for(int i=0; i < 5; i++) Console.WriteLine("Next value is " + ob.next); Console.WriteLine("\nStarting at 21"); ob.next = 21; for(int i=0; i < 5; i++) Console.WriteLine("Next value is " + ob.next); Console.WriteLine("\nResetting to 0"); ob.next = 0; // access series through an indexer for(int i=0; i < 5; i++) Console.WriteLine("Next value is " + ob[i]); } }
The output from this program is shown here:
Next value is 2 Next value is 4 Next value is 6 Next value is 8 Next value is 10 Starting at 21 Next value is 23 Next value is 25 Next value is 27 Next value is 29 Next value is 31 Resetting to 0 Next value is 0 Next value is 2 Next value is 4 Next value is 6 Next value is 8