تنجز المصفوفة المدارة managed array وظيفة المصفوفة الطبيعية بالاضافة إلى تجسدها بشكل كائن object يتمم وظائفه بطرق وصفات متنوعة methods & properties،هذه الطرق لها مهام عامة مثل فرز المصفوفة وإيجاد حجمها. الصيغة العامة لتعريف مصفوفة مدارة هي كالتالي (array كلمة مفتاحية):
array< type, rank >^ arrayName;
حيث يمثل "type" نوع المصفوفة كـونها intأو double مثلا، بينما يمثل "rank" أبعاد المصفوفة أو كما شاع رتبتها،
وفي حال تجاهل الرتبة يتم تعريف مصفوفة افتراضية ذات بعد واحد، وكمثال آخر نأخذ المصفوفة التالية:
array<double, 2>^ ManArray;
يُسمى ManArrayمقبض لمصفوفة مُدارة من النوع double والبُعد 2، لاحظ أن اسم المصفوفة ما هو إلا "مقبض"
وما يعضد ذلك استخدام علامة الإقحام "^" ، المقبض ManArray يشير إلى لاشيء NULL، حيث وكما نلاحظ لا
وجود لشيء في التعريف السابق يشير لحجم المصفوفة! من المثير التنبيه على أن مقبض المصفوفة المدارة لا يشير البتة
لعنوان أول عنصر بها على نقيض ما اعتدناه في C/C++الكلاسيكية.
لكي نقوم بتهيئة قيم مبدأية لمصفوفة يمكن استخدام طريقتين، بوجود المؤثر gcnew وبدونه، المثال التالي يوضح الطريقتان:
using namespace System;
int main()
{
// initialization without gcnew
array<int>^ array_int1 = { 0, 1, 2 };
array<int>^ array_int2 = gcnew array<int> { 0, 1, 2 };
// You can use variables in the initializer list.
int i = 1, j = 2, k = 3;
array<int>^ array_int3 = { i, j, k };
}كما نلاحظ قمنا بتهيئة مصفوفتان بطريقتين مختلفتين، لاحظ المصفوفة array_int1 و array_int2، طبعا لا
وجود لفرق وظيفي بين نوعي التهيئة، كل ما في الأمر أن التهيئة الأولى تبسيط لنحوية الكتابة لا غير(سكّر نحوي).
كوننا قمنا بتهيئة المصفوفة بعناصر مبدأية أثناء التعريف، فلا حاجة لتعيين حجم للمصفوفة لأن ذلك سيتم تلقائيا
اعتمادا على عدد العناصر المهيئة، أما الأصل أن نكتب التعريف والتهيئة مع الحجم بالطريقة التالية:
array<int>^ array_int2 = gcnew array<int>(3) { 0, 1, 2 };أو اذا كانت المصفوفة من الرتبة الثانية (ذات بعدين):
array<int,2>^ array_int2 = gcnew array<int,2>(2,2) {{ 0, 1},{1, 2}};وهكذا مع الرتب الأعلى.. لإيجاد عدد العناصر الموجودة في مصفوفة مدارة يمكن استخدام الصفة Length كالتالي:
int i = Myarray->Length;
using namespace System;
int main()
{
array<String^>^ stringArray = gcnew array<String^>
{ "one", "two", "three", "four", "five" };
int i=0;
for each (String^ str in stringArray)
{
Console::WriteLine(str);
i++;
}
Console::WriteLine("Array size is {0}.",i);
}
يمكن تعيين عنصر من المصفوفة المدارة تماما مثلما كنا نفعل مع المصفوفة غير المدارة كالتالي:
using namespace System;
int main()
{
array<String^>^ stringArray = gcnew array<String^>
{ "one", "two", "three", "four", "five" };
Console::WriteLine("The first element in the array is {0}.",stringArray[0]);
}وفي حالة مصفوفة ذات بعدين مثلا، يكون التعيين مختلفا قليلا عن مقابله في المصفوفة غير المدارة، حيث يمكن تحديد عنصر في المصفوفة بالنهج
ArrayName[i,j]