اقرأ في هذا المقال
- ما هي أنواع الأعضاء members في لغة السي شارب
- ما المقصود بالحقول Fields
- ما المقصود بالطرق Methods
- ما المقصود بالمعامِلات Parameters
في هذا المقال، سنتحدث عن الأعضاء (Members) في لغة البرمجة (#C)، و عن الخصائص (properties) والحقول (fields) والأساليب (methods) والأحداث (events) والصياغات التعبيرية (Expression Statements).
ما هي أنواع الأعضاء members في لغة السي شارب
تعريف الأعضاء Members
أعضاء الفئة (class) إما أعضاء ثابتة (static members) أو تكون على شكل نموذج (instance members)، حيث ينتمي الأعضاء الثابتون إلى الفئات (classes)، وينتمي أعضاء النموذج إلى الكائنات (objects) في حالات من الفئات (instances of classes).
أنواع الأعضاء التي تحتوي عليها الفئات class members
- الثوابت (Constants): هي القيم الثابتة المرتبطة بالفئة.
- الحقول (Fields): المتغيرات المرتبطة بالفئة.
- الأساليب أو الطرق (Methods): هي الإجراءات التي يمكن للفئة القيام بها.
- الخصائص: هي الإجراءات المرتبطة بقراءة وكتابة خصائص فئة .
- المفهرسات: هي الإجراءات المرتبطة بفهرسة الفئة مثل المصفوفة.
- الأحداث (Events): هي الإشعارات التي تم إنشاؤها بواسطة الفئة.
- عوامل التشغيل (Operators): هي عمليات التحويل والتعبير التي يدعمها الفئة.
- المُنشئون (Constructors): هي الإجراءات المطلوبة لتهيئة أمثلة من الفئة أو الفئة نفسها.
- المصممون النهائيون (Finalizers): هي الإجراءات (Actions) التي تم القيام بها قبل أن يتم التخلص منها بشكل دائم.
- الأنواع (Types): هي الأنواع المتداخلة المعلنة بواسطة الفئة (class).
إمكانية الوصول المرتبطة
كل عضو في الفئة لديه إمكانية وصول مرتبطة، والتي تتحكم في مناطق نص البرنامج (program text) التي يمكنها الوصول إلى العضو (member)، ويوجد ستة أنواع منها وهي كالتالي:
- العام (public): هو الوصول غير المحدود.
- الخاص (private): هو الوصول المحدد فقط لهذه الفئة.
- المحمي (protected): هو مقتصر فقط على هذه الفئة أو الفئات المشتقة من هذه الفئة.
- الداخلي (internal): هو الوصول الذي ينتهي امتداد (exe. أو dll.).
- الداخلي المحمي (protected internal): هو الوصول المحدد لهذه الفئة، أو الفئات المشتقة من هذه الفئة، أو الفئات داخل نفس التجميع (assembly).
- المحمية الخاصة (private protected): هي الوصول المحدود لهذه الفئة أو الفئات المشتقة من هذا النوع داخل نفس التجميع.
ما المقصود بالحقول Fields
الحقل (field): هو متغير مرتبط بفئة أو نموذج الفئة، يُعرّف الحقل المُعرّف (static modifier) باستخدام حقل ثابت (static field) حيث يحدد الحقل الثابت موقع تخزين واحد ثابت، بغض النظر عن عدد مرات التي تم إنشاؤها في الفئة، فهناك نسخة واحدة فقط من حقل ثابت، كل نموذج يحتوي مثيل الفئة على نسخة منفصلة من جميع حقول نموذج من تلك الفئة.
مثال على الحقول fields
في المثال التالي يحتوي كل نموذج لفئة اللون على نسخة منفصلة من حقول نموذج ( R و G و B )، ولكن هناك نسخة واحدة فقط من الحقول الثابتة الأسود والأبيض والأحمر والأخضر والأزرق:
public class Color
{
public static readonly Color Black = new(0, 0, 0);
public static readonly Color White = new(255, 255, 255);
public static readonly Color Red = new(255, 0, 0);
public static readonly Color Green = new(0, 255, 0);
public static readonly Color Blue = new(0, 0, 255);
public byte R;
public byte G;
public byte B;
public Color(byte r, byte g, byte b)
{
R = r;
G = g;
B = b;
}
}
كما هو موضح في المثال السابق، قد تكون الحقول للقراءة فقط (read-only fields)، يمكن التخصيص إلى حقل للقراءة فقط (read-only fields) كجزء من مجال الإعلان للحقل أو في مُنشئ في نفس الفئة.
ما المقصود بالطرق Methods
الطرق (Methods): هي عضو ينفذ عملية الحسابية أو إجراء يمكن تنفيذه بواسطة كائن (object) أو فئة، يتم الوصول إلى الأساليب الثابتة من خلال الفئة (class)، ويتم الوصول إلى النموذج (Instance methods) من خلال الفئة.
قد تحتوي الطرق على قائمة من المعامِلات (parameters)، والتي تمثل القيم أو مراجع المتغيرات التي تم تمريرها إلى الطريقة (method)، الأساليب لها نوع إرجاع (return type)، والذي يحدد نوع القيمة المحسوبة والعودة بالطريقة.
يعد نوع إرجاع الطريقة باطلاً إذا لم يُرجع قيمة، قد تحتوي الطرق أيضًا على مجموعة من معامِلات النوع (type parameters)، والتي يجب تحديد وسيطات النوع لها عند استدعاء الطريقة، على عكس الأنواع، يمكن غالبًا الاستدلال على وسيطات النوع من وسيطات استدعاء الطريقة.
عندما يكون نص الطريقة (method body) عبارة عن تعبير واحد (single expression)، يمكن تعريف الطريقة باستخدام تنسيق التعبير المضغوط، كما هو موضح في المثال التالي:
publicoverridestringToString() => “This is an object”;
ما المقصود بالمعامِلات Parameters
تُستخدم المعامِلات (Parameters) عبر القيم (values) أو المراجع المتغيرة (variable references) إلى الطرق، و تحصل معامِلات الأسلوب على قيمها الفعلية من الوسائط التي تم تحديدها عند استدعاء الطريقة (method)، هناك أربعة أنواع من المعامِلات:
- معامِلات القيمة (value parameters).
- المعامِلات المرجعية (reference parameters).
- معامِلات المخرجات (output parameters).
- مصفوفات المعامِلات (parameter arrays).
معامِلات القيمة Value parameter
يتم استخدام معامِلات القيمة (value parameter) لتمرير وسيطات الإدخال، حيث تتوافق معامِلات القيمة مع المتغير المحلي حيث يحصل على قيمته الأولية من الوسيطة التي تم تمريرها للمعامل، لا تؤثر التعديلات على معلمة القيمة على الوسيطة التي تم تمريرها للمعلمة، يمكن أن تكون معامِلات القيمة اختيارية، من خلال تحديد قيمة افتراضية بحيث يمكن حذف الوسائط المقابلة.
المعامِلات المرجعية Reference parameter
يتم استخدام المعامِلات المرجعية كمتغير ذا قيمة محددة أثناء تنفيذ الطريقة (method)، تمثل معامِلات المرجعية نفس موقع التخزين مثل متغير الوسيطة (argument variable)، يتم التصريح عن معامِلات المرجعية مع معدل المرجع، يوضح المثال التالي استخدام المعامِلات المرجعية:
static void Swap(ref int x, ref int y)
{
int temp = x;
x = y;
y = temp;
}
public static void SwapExample()
{
int i = 1, j = 2;
Swap(ref i, ref j);
Console.WriteLine($”{i} {j}”); // “2 1”
}
معامِلات المخرجات Output parameter
يتم استخدام معامِلات الإخراج (output parameter) لتمرير الوسائط حسب المرجع، إنه مشابه لمعامِلات المرجعية، إلا أنه لا يتطلب منك تعيين قيمة صريحة للوسيطة التي يوفرها المتصل (caller-provided argument)، يتم التصريح عن معامِلات الإخراج مع معدل الإخراج، يوضح المثال التالي استخدام معامِلات الإخراج:
static void Divide(int x, int y, out int result, out int remainder)
{
result = x / y;
remainder = x % y;
}
public static void OutUsage()
{
Divide(10, 3, out int res, out int rem);
Console.WriteLine($”{res} {rem}”); // “3 1”
}
مصفوفات المعامِلات Parameter arrays
تسمح مصفوفات المعامِلات (parameter arrays) بتمرير عدد متغير (variable number) من الوسائط إلى الطرق (method)، تم التصريح عن مصفوفات المعلمات المعلن عنها باستخدام معدِّل المعامِلات، فقط المعامِلة الأخيرة للطريقة يمكن أن تكون مصفوفة المعامِلات.
ويجب أن يكون نوع مصفوفة المعامِلات من نوع المصفوفة أحادية البعد، تعتبر أساليب الكتابة والكتابة للفئة (System.Console) أمثلة جيدة لاستخدام معامِلات المصفوفات مثال على ذلك:
public class Console
{
public static void Write(string fmt, params object[] args) { }
public static void WriteLine(string fmt, params object[] args) { }
// …
}
طريقة عمل مصفوفة المعامِلات (parameter arrays) تمامًا مثل معامل عادي لنوع مصفوفة، ومع ذلك في استدعاء الأسلوب مع مصفوفة المعامِلات، من الممكن وضع وسيطة واحدة من نوع مصفوفة المعامِلات أو أي عدد من الوسائط لنوع عنصر مصفوفة المعامِلات، في هذا المثال يتم إنشاء مثيل مصفوفة تلقائيًا وتهيئته باستخدام الوسائط المحددة:
int x, y, z;
x = 3;
y = 4;
z = 5;
Console.WriteLine(“x={0} y={1} z={2}”, x, y, z);
يعادل كتابة ما يلي:
int x = 3, y = 4, z = 5;
string s = “x={0} y={1} z={2}”;
object[] args = new object[3];
args[0] = x;
args[1] = y;
args[2] = z;
Console.WriteLine(s, args);