public class IndexerBox { private string[] names = { "length", "width", "height" }; private double[] dimensions = new double[3]; // constructor public IndexerBox(double length, double width, double height) { dimensions[0] = length; dimensions[1] = width; dimensions[2] = height; } // indexer to access dimensions by integer index number public double this[int index] { get { // validate index to get if ((index < 0) || (index >= dimensions.Length)) return -1; else return dimensions[index]; } // end get set { if (index >= 0 && index < dimensions.Length) dimensions[index] = value; } // end set } // end numeric indexer // indexer to access dimensions by their string names public double this[string name] { get { // locate element to get int i = 0; while ((i < names.Length) && (name.ToLower() != names[i])) ++i; return (i == names.Length) ? -1 : dimensions[i]; } // end get set { // locate element to set int i = 0; while ((i < names.Length) && (name.ToLower() != names[i])) ++i; if (i != names.Length) dimensions[i] = value; } // end set } // end string indexer } // end class IndexerBox