This is the base class for arrays, both one-dimensional and multi-dimensional. The indices of an array are 0-based. The length and rank (number of dimensions) of an array are 1-based. Note that jagged arrays (Type[][]...[]) are considered to be arrays of arrays, and therefore Rank returns 1 on a jagged array.
class Array : ICloneable, ICollection { public: //Fields const static Array Empty; //Properites property int Count; property Object SyncRoot; property boolean IsSynchronized; property boolean IsReadOnly; property int Rank; property int Length; //Methods virtual Object BinarySearch(Object value, IComparer comparer) virtual Object Clone (); virtual void CopyTo(Array array, int index); virtual bool Equals (Object obj); //inherited from Object virtual IEnumerator GetEnumerator(); virtual int GetLength (int rank); virtual int GetLowerBound (int dimension); virtual int GetUpperBound (int dimension); virtual object GetValue (int index); virtual object GetValue (int index1, int index2); virtual object GetValue (int index1, int index2, int index3); virtual object GetValue (int indices[]); virtual object GetValue (int index1, …); virtual void Sort(IComparer comparer); virtual void SetValue (object value, int index); virtual void SetValue (object value, int index1, int index2); virtual void SetValue (object value, int index1, int index2, int index3); virtual void SetValue (object value, int indices[]); virtual void SetValue (object value, int index1, …); static [sealed] IList AsList (Array array); static int BinarySearch (Array array, int index, int count, Object value); static int BinarySearch (Array array, int index, int count, Object value, IComparer comparer); static [sealed] int BinarySearch (Array array, Object value); static int BinarySearch (Array array, Object value, IComparer comparer); static void Clear (Array array, int index, int length); static void Copy (Array sourceArray, int sourceIndex, Array destinationArray, int destinationIndex, int length); static void Copy (Array sourceArray, Array destinationArray, int length); static [sealed] Array CreateInstance (Type elementType, int length); static [sealed] Array CreateInstance (Type elementType, int length1, int length2); static [sealed] Array CreateInstance (Type elementType, int length1, int length2, int length3); static [sealed] Array CreateInstance (Type elementType, int lengths[]); static [sealed] Array CreateInstance (Type elementType, int lengths[], int lowerBounds[]); static int IndexOf (Array array, Object value); static int IndexOf (Array array, Object value, int startIndex); static int IndexOf (Array array, Object value, int startIndex, int endIndex); static int LastIndexOf (Array array, Object value); static int LastIndexOf (Array array, Object value, int startIndex); static int LastIndexOf (Array array, Object value, int startIndex, int endIndex); static void Reverse (Array array); static void Reverse (Array array, int index, int count); static void Sort (Array array); static void Sort (Array array, int index, int count); static void Sort (Array array, int index, int count, IComparer comparer); static void Sort (Array array, IComparer comparer); static void Sort (Array keys, Array items); static void Sort (Array keys, Array items, int index, int count); static void Sort (Array keys, Array items, int index, int count, IComparer comparer); static void Sort (Array keys, Array items, IComparer comparer); };