// // This file contains the C# code from Program 4.8 of // "Data Structures and Algorithms // with Object-Oriented Design Patterns in C#" // by Bruno R. Preiss. // // Copyright (c) 2001--2002 by Bruno R. Preiss, P.Eng. All rights reserved. // // http://www.brpreiss.com/books/opus6/programs/pgm04_08.txt // public class MultiDimensionalArray { private int[] dimensions; private int[] factors; private object[] data; private int GetOffset(int[] indices) { if (indices.Length != dimensions.Length) throw new IndexOutOfRangeException(); int offset = 0; for (int i = 0; i < dimensions.Length; ++i) { if (indices[i] < 0 || indices[i] >= dimensions[i]) throw new IndexOutOfRangeException(); offset += factors[i] * indices[i]; } return offset; } public object this[params int[] indices] { get { return data[GetOffset(indices)]; } set { data[GetOffset(indices)] = value; } } // ... }