How to overload indexer in C#

Overload the indexer

The following code creates a class with indexers overloaded for int and double.


using System;  //from ww  w  .  j a va  2  s .c o m
  
class MyArray {   
  int[] a;    
  
  public int Length;
  
  public bool errflag;
    
  public MyArray(int size) {  
    a = new int[size];  
    Length = size;   
  }  
  
  // This is the int indexer for MyArray.  
  public int this[int index] {  
    get {  
      if(indexCheck(index)) {  
        errflag = false;  
        return a[index];  
      } else {  
        errflag = true;  
        return 0;  
      }  
    }  
  
    set {  
      if(indexCheck(index)) {  
        a[index] = value;  
        errflag = false;  
      }  
      else errflag = true;  
    }  
  }  
  
  public int this[double idx] {  
    get {  
      int index = (int) idx; 
 
      if(indexCheck(index)) {  
        errflag = false;  
        return a[index];  
      } else {  
        errflag = true;  
        return 0;  
      }  
    }  
  
    set {  
      int index = (int) idx; 
 
      if(indexCheck(index)) {  
        a[index] = value;  
        errflag = false;  
      }  
      else errflag = true;  
    }  
  }  
  
  private bool indexCheck(int index) {  
   if(index >= 0 & index < Length) return true;  
   return false;  
  }  
}   
   

class MainClass {   
  public static void Main() {   
    MyArray myArray = new MyArray(5);  
  
    for(int i=0; i < myArray.Length; i++) 
      myArray[i] = i;  
 
    // now index with ints and doubles 
    Console.WriteLine("myArray[1]: " + myArray[1]); 
    Console.WriteLine("myArray[2]: " + myArray[2]); 
 
    Console.WriteLine("myArray[1.1]: " + myArray[1.1]); 
    Console.WriteLine("myArray[1.6]: " + myArray[1.6]); 
 
  }  
}

The code above generates the following result.





















Home »
  C# Tutorial »
    Custom Types »




C# Class
C# Struct
C# Interface
C# Inheritance
C# Namespace
C# Object
C# Delegate
C# Lambda
C# Event
C# Enum
C# Attribute
C# Generics
C# Preprocessor