الخاصية في C# هي عضو في صنف يوفّر الوصول إلى البيانات داخل ذلك الصنف.
يمكن لمن يستدعي الخاصية أن يعيّن البيانات أو يسترجعها (get). يمكن أن تكون الخصائص منفّذة تلقائيًا أو أن يكون لها حقل داعم. تتكوّن من مُوصِّل set و/أو مُوصِّل get.
في بعض اللغات الأخرى، يكون "mutator" مكافئًا تقريبًا لمُوصِّل set، ويكون "accessor" مكافئًا تقريبًا لمُوصِّل get، وإن كانت بنية الصياغة مختلفة تمامًا.
عند تعيين قيمة خاصية، يمكن التحقق من القيمة المُدخلة أو تنسيقها أو معالجتها بأي طريقة أخرى، بل يمكن تنفيذ أي عملية برمجية يمكن للكود في الصنف الوصول إليها.
وبالمثل، عند استرجاع قيمة خاصية، يمكن حساب البيانات أو تنسيقها، ومرة أخرى يمكن تنفيذ أي عملية برمجية متاحة للصنف.
للخصائص معدّلات وصول (public، private وغيرها) تمامًا مثل بقية أعضاء الصنف، لكن قد يكون لمُوصِّل set مستوى وصول مستقلًا عن مُوصِّل الاسترجاع (get)، والعكس صحيح. ولا يلزم أن تحتوي الخاصية على كلا المُوصِّلين، بل يمكن أن تحتوي على واحد فقط (إما get أو set).
يمكن أن تأخذ الصيغة الأساسية للتعبير عن الخصائص شكلين:
private int myField;
public int MyProperty
{
get { return myField; }
set { myField = value; }
}
public int MyProperty { get; private set; } = 42;
التهيئة اختيارية.
في هذا التمرين ستقوم بنمذجة آلة وزن، بحيث تكون الكيلوغرامات هي الوحدة المستخدمة.
لديك 6 مهام، تتطلب كل واحدة منها تنفيذ خاصية أو أكثر:
لتلبية المتطلبات المختلفة، نسمح بتخصيص كل آلة وزن بدقة معينة (عدد الأرقام بعد الفاصلة العشرية).
نفّذ الصنف WeighingMachine بحيث يمتلك خاصية Precision للقراءة فقط، تُضبط على وسيط precision الخاص بالمُنشئ:
var wm = new WeighingMachine(precision: 3);
// => wm.Precision == 3
نفّذ الخاصية WeighingMachine.Weight للسماح بقراءة الوزن و ضبطه:
var wm = new WeighingMachine(precision: 3);
wm.Weight = 60.5;
// => wm.Weight == 60.5
من الواضح أنه لا يمكن أن يكون وزن شخص ما سالبًا.
أضف تحققًا إلى الخاصية WeighingMachine.Weight لترمي استثناء ArgumentOutOfRangeException عند محاولة ضبطها على وزن سالب:
var wm = new WeighingMachine(precision: 3);
wm.Weight = -10; // Throws an ArgumentOutOfRangeException
يمكن أن يكون تعديل الوزن الفارغ أي قيمة (حتى قيمة سالبة، أو قيمة تجعل الوزن المعروض سالبًا)
نفّذ الخاصية WeighingMachine.TareAdjustment للسماح بضبط تعديل الوزن الفارغ:
var wm = new WeighingMachine(precision: 3);
wm.TareAdjustment = -10.6;
// => wm.TareAdjustment == -10.6
بعد إجراء اختبارات دقيقة، تبيّن أنه بسبب مشكلة في التصنيع، تميل جميع آلات الوزن إلى المبالغة في تقدير الوزن بمقدار 5.
غيّر الخاصية WeighingMachine.TareAdjustment لتكون 5 كقيمة افتراضية لها.
var wm = new WeighingMachine(precision: 3);
// => wm.TareAdjustment == 5.0
نفّذ الخاصية WeighingMachine.DisplayWeight التي يجب أن تُرجع سلسلة نصية تُظهر الوزن بعد تعديل الوزن الفارغ، مع تطبيق الدقة الصحيحة وإضافة الوحدة.
لاحظ أن:
display-weight = input-weight - tare-adjustment
var wm = new WeighingMachine(precision: 3);
wm.Weight = 60.567;
wm.TareAdjustment = 10;
// => wm.DisplayWeight == "50.567 kg"
سجّل في Exercism لتتعلّم وتتقن C# عبر 62 مفهومًا178 تمرينًا، وإرشاد بشري حقيقي، وكل ذلك مجانًا.