البرمجة

تعيين قيمة الخاصية في C#

عندما نتعامل مع هيكلة الكلاسات في لغة C#، يصبح من الأمور المهمة التفكير في كيفية تنظيم البيانات وتنفيذ السلوكيات بطريقة تسمح بالمرونة والاستدامة. في حالتك، ترغب في تنفيذ خاصية مُعينة في الكلاس المشتق (Derived Class) دون السماح بإمكانية تعيينها من الكلاس الأساسي (Base Class) أو أي كلاسات أخرى تشتق منه.

أحد الطرق التي يمكن أن تعمل بنجاح هي استخدام متغير خاص (private field) في الكلاس المشتق، مع استخدام الوظيفة (getter) والوظيفة المعدلة (setter) للوصول إليه وتعيين قيمته بشكل مُناسب. على سبيل المثال:

csharp
public class BaseClass { private BaseClass _Parent; public virtual decimal Result { get { return ((_Parent != null) ? _Parent.Result : -1); } } } public class DerivedClass : BaseClass { private decimal _Result; public override decimal Result { get { return _Result; } } public void SetResult(decimal value) { _Result = value; } }

في هذا المثال، تم استخدام متغير خاص _Result في الكلاس المشتق DerivedClass، وتم تعريف وظيفة SetResult التي تسمح بتعيين قيمة _Result بشكل مُتحكم به. هذا النهج يمنحك التحكم الكامل في كيفية الوصول والتعيين للخاصية دون الحاجة إلى تغيير في الوصول للعناصر في الكلاس الأساسي.

ومن الجدير بالذكر أنه يمكنك أيضًا استخدام الحقول المحمية (protected fields) في الكلاس المشتق لتحقيق نفس الهدف، مع استخدام وظيفة معينة لتعيين قيمة الحقل. هذا يمكن أن يكون مفيدًا إذا كنت ترغب في السماح لكلاسات أخرى مشتقة من الكلاس الأساسي بالوصول إلى هذه الخاصية بشكل محمي.

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

بالطبع، لنواصل التفصيل في المقال:

في حال كان لديك حاجة للسماح بتعيين القيمة فقط من داخل الكلاس المشتق وعدم السماح بالوصول إليها من الخارج، يمكنك استخدام الوظائف المُحمية (protected functions) أو الوظائف العامة (public functions) التي تقوم بتعيين القيمة بشكل محدد دون إمكانية الوصول إليها مباشرة.

لذا، يمكننا تعديل الكود كما يلي:

csharp
public class BaseClass { private BaseClass _Parent; public virtual decimal Result { get { return ((_Parent != null) ? _Parent.Result : -1); } } } public class DerivedClass : BaseClass { private decimal _Result; public override decimal Result { get { return _Result; } } protected void SetResult(decimal value) { _Result = value; } }

في هذا التنظيم، تم تغيير وظيفة SetResult لتكون محمية بدلاً من عامة، مما يعني أنه يمكن الوصول إليها فقط من داخل الكلاس المشتق أو من كلاسات أخرى تشتق منه.

هذا النهج يوفر المرونة والأمان في نفس الوقت، حيث يمكنك تعيين قيمة الخاصية بشكل مركزي دون الحاجة لإضافة وظائف setter في الكلاس الأساسي أو تعريض الخاصية للوصول العام.

بهذا الشكل، يمكن للكائنات المشتقة من الكلاس المشتق الوصول إلى الخاصية وتعيين قيمتها وفقًا للمنطق الخاص بها دون تعريضها للتعديلات غير المرغوب فيها من الخارج.

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

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

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