Кратко съдържание



страница55/73
Дата21.07.2018
Размер8.57 Mb.
1   ...   51   52   53   54   55   56   57   58   ...   73

Типът System.Array


Всички масиви в .NET Framework наследяват типа System.Array. Това наследяване става неявно и се извършва от CLR. Абстрактният тип System.Array предлага няколко метода и свойства, който също се наследяват от всички масиви. В следващите таблици ще разгледаме по-важните методи и свойства на System.Array.

Свойства


Свойство

Описание

Rank

Връща броя на размерностите (измере­нията) на масива.

Length

Връща цяло число от тип System.Int32, което представлява общия брой на елементите (от всич­ки размерности) на масива.

LongLength

Връща цяло число от тип System.Int64, което представлява общия брой на елементите (от всич­ки размерности) на масива.

Забележка: Изброените свойства са достъпни само за четене.

Методи


Метод

Описание

GetLength(…)

Връща броя на елементите по дадена размерност.

GetEnumerator()

Връща имплементация на интерфейса IEnumerator за елементите на ма­си­ва. Това дава възможност да се из­ползва конструкцията foreach(…), чрез която може да се обходят всички елементи на масива. Обхождането за многомерни масиви става отляво на дясно по размер­ностите, т.е. най-дясното изме­ре­ние се сме­ня най-бързо.

Reverse(…)

Статичен метод на System.Array. Обръща елемен­тите на даден едномерен масив в обратен ред. Ако масивът не е едномерен се подава RankException.

Clear(…)

Статичен метод на System.Array. Задава стойност 0 (null за референтни типове) на елементите в зададен интервал.

Sort(…)

Статичен метод на System.Array. Сортира елемен­тите на даден масив по големина.

BinarySearch(…)

Статичен метод на System.Array. Търси за даден елемент в даден масив чрез метода на двоичното търсене. Методът предпола­га, че елементите на масива се подредени по големина предварително.

IndexOf(…)

Статичен метод на System.Array. Връща индекса на първото срещане на дадена стойност в даден едномерен масив. Ако елементът не се среща в масива, връща -1. Ако масивът не е едномерен, се подава RankException.

LastIndexOf(…)

Статичен метод на System.Array. Връща индекса на последното срещане на даде­на стойност в даден едномерен масив. Ако елементът не се среща в масива връща -1. Ако масивът не е едномерен се подава RankException.

CreateInstance(…)

Статичен метод на System.Array. Създава дина­мично (по време на изпълнение) инстанция на типа System.Array, като може да се зададе тип на елементите, брой размерности, долна граница и брой елементи за всяка размерност.

Copy(…)

Статичен метод на System.Array. Копира елемен­тите на един масив (или част от тях) в друг масив. Този метод извършва, ако е необходимо, преобра­зуване на типовете на масивите.

Имплементирани интерфейси


Типът System.Array имплементира следните интерфейси: ICloneable, IList, IEnumerable и ICollection. Тези интерфейси (методите, свойства­та и индексаторите, които предлагат) улесняват използването на масивите в множество и разнообразни ситуации.

Ще разгледаме малко по-подробно всеки един от имплементираните интерфейси:



  • ICloneableпредоставя метод Clone(), който се използва за клониране на масив. По подразбиране масивите се копират плитко (shallow copy). Това означава, че ако копираме масив от референтни типове, елементите на новия масив ще сочат към същото място в паметта, към което са сочили съответно елементите от стария масив.

  • IList – предоставя директен (пряк) достъп до елементите на маси­ва. Типът System.Array експлицитно (явно) имплементира всеки един от методите на IList.

  • IEnumerable – предоставя метода GetEnumerator(), чрез който могат да се обходят всички елементи на масива (виж таблицата с методите на класа System.Array).

  • ICollection – осигурява свойството Count (размер) и средства за синхрони­зация на достъпа до елементите. ICollection от своя страна имплементира IEnumerable.

Създаване на ненулево-базиран масив – пример


В следващия пример ще илюстрираме как е възможно създаването на масив в .NET Framework, чиято долна граница не е 0:

using System;
class NonZeroBasedArray

{

static void Main()



{

int[] lowerBounds = { 2, 3 };

int[] lengths = { 5, 3 };
int[,] myArray = (int[,]) Array.CreateInstance(

typeof(int), lengths, lowerBounds);


myArray[3,3] = 10;

myArray[6,4] = 20;

// myArray[0,0] = 40; will throw IndexOutOfRangeException
for( int i=myArray.GetLowerBound(0); i<=myArray.GetUpperBound(0); i++ )

{

for( int j=myArray.GetLowerBound(1); j<=myArray.GetUpperBound(1); j++ )



{

Console.WriteLine("[{0},{1}]={2}", i, j, myArray[i,j]);

}

Console.WriteLine();



}

}

}



Ето резултатът от изпълнението на програмата:

В примера използваме вече разгледания статичен метод Array. CreateInstance(…), който приема като параметри типа на масива, който се създава, както и два масива от тип System.Int32 – първият с дължи­ните на всяка размер­ност, а вторият – с долните граници за всяка от размерностите. Използваме още и методите GetLowerBound(…) и GetUpperBound(…), които връщат съответно долната и горната граница за дадена раз­мер­ност.

За удобство върнатият от метода CreateInstance(…) обект може да се преобразува към очаквания тип. В горния пример това е типът int[,].

Странно, но факт е, че в .NET Framework това преобразуване не може да стане, ако очакваният масив е едномерен и първият елемент на масива не е 0 (CLR подава InvalidCastException). Ето един такъв пример:



int[] lowerBounds = { 2 };

int[] lengths = { 5 };


int[] arr = (int[]) Array.CreateInstance(

typeof(int), lengths, lowerBounds);

// System.InvalidCastException is thrown


Ако искаме да ползваме едномерни масиви, трябва да ползваме методите на System.Array: GetValue(…) и SetValue(…), които ни дават достъп до еле­ментите на масива. Следният код демонстрира това:

int [] lengths = {6};

int [] bounds = {5};


Array array = Array.CreateInstance(

typeof(double), lengths, bounds);


for (int i=array.GetLowerBound(0); i<=array.GetUpperBound(0); i++)

{

array.SetValue(7, i);



}

1   ...   51   52   53   54   55   56   57   58   ...   73


База данных защищена авторским правом ©obuch.info 2016
отнасят до администрацията

    Начална страница