البرمجة

فهم استخدام الكلمة الرئيسية ‘this’ في C#

في عملية استخدام الكلمة الرئيسية “this” في الكلاس الخاص بك، يبدو أنك واجهت تحدياً يتعلق بالاستخدام الصحيح لهذه الكلمة في سياق ثابت. لفهم الخطأ الذي واجهته والوصول إلى حلاً له، دعنا نستعرض الشيفرة التي قدمتها:

csharp
class MyMenu { public static void AddLine() { ShapeContainer canvas = new ShapeContainer(); LineShape theLine = new LineShape(); canvas.Parent = this; // هنا يحدث الخطأ theLine.Parent = canvas; theLine.BorderColor = SystemColors.ControlDarkDark; theLine.StartPoint = new System.Drawing.Point(-3, 154); theLine.EndPoint = new System.Drawing.Point(212, 154); } }

المشكلة تكمن في أن الكلمة الرئيسية “this” لا يمكن استخدامها في سياقات ثابتة مثل الدوال الثابتة (static methods). الدوال الثابتة لا تتعلق بحالة معينة لكائن، وبالتالي لا يمكنها الوصول إلى الكائنات الحالية باستخدام “this”.

لحل هذا التحدي، يمكنك تغيير الدالة AddLine لتكون غير ثابتة وتعمل على مستوى الكائن. إليك كيف يمكن تعديل الشيفرة:

csharp
class MyMenu { public void AddLine() { ShapeContainer canvas = new ShapeContainer(); LineShape theLine = new LineShape(); canvas.Parent = this; // هنا يمكن استخدام "this" theLine.Parent = canvas; theLine.BorderColor = SystemColors.ControlDarkDark; theLine.StartPoint = new System.Drawing.Point(-3, 154); theLine.EndPoint = new System.Drawing.Point(212, 154); } }

ثم، عند استخدام هذه الدالة في كائن MyMenu، ستتمكن من الوصول إلى “this” بشكل صحيح. على سبيل المثال:

csharp
MyMenu myMenu = new MyMenu(); myMenu.AddLine();

هكذا، يمكنك تجنب الخطأ الذي واجهته وتحسين استخدام الكلمة الرئيسية “this” في تصميم الكلاس الخاص بك.

المزيد من المعلومات

في مسعى لتوسيع فهمك حول موضوع الاستخدام الصحيح للكلمة الرئيسية “this” في لغة البرمجة C#، يمكننا النظر في بعض النقاط الإضافية والتفاصيل ذات الصلة.

الكلمة الرئيسية “this” تشير إلى الكائن الحالي الذي يتم استخدامه في سياق البرمجة. في حالة الدوال الغير ثابتة، يكون “this” يشير إلى الكائن الذي تم استدعاء الدالة منه. ومن الجدير بالذكر أن استخدام “this” يساعد على تفادي الالتباس عند وجود أسماء متغيرة متشابهة بين الحقول والمتغيرات المحلية.

تجدر الإشارة إلى أن الدوال الثابتة (static methods) لا تتبع نفس القواعد. يتم تنفيذ الدوال الثابتة على مستوى الفئة نفسها، وليس لها تأثير على حالة معينة لكائن. لذا، لا يمكن استخدام “this” داخل دوال ثابتة.

إذا كنت ترغب في استخدام “this” في دالة ثابتة، يمكنك استخدامها في سياق غير ثابت مثل دالة غير ثابتة في نفس الكلاس. ومن ثم يمكنك استدعاء الدالة الغير ثابتة من داخل دالة ثابتة.

csharp
class MyMenu { private ShapeContainer canvas; public void AddLine() { canvas = new ShapeContainer(); LineShape theLine = new LineShape(); SetCanvasParent(); // استدعاء دالة غير ثابتة theLine.Parent = canvas; theLine.BorderColor = SystemColors.ControlDarkDark; theLine.StartPoint = new System.Drawing.Point(-3, 154); theLine.EndPoint = new System.Drawing.Point(212, 154); } private void SetCanvasParent() { canvas.Parent = this; // يمكن استخدام "this" هنا } }

هذا النهج يسمح بالاستفادة من “this” في سياق غير ثابت داخل الكلاس. يمكنك استكمال تطوير الكود بناءً على احتياجات مشروعك ومتطلبات البرمجة الخاصة بك.

مقالات ذات صلة

زر الذهاب إلى الأعلى

هذا المحتوى محمي من النسخ لمشاركته يرجى استعمال أزرار المشاركة السريعة أو تسخ الرابط !!