يمكن تطبيق المُعدِّل const (ويُستحسن عمومًا ذلك) على أي حقل تكون قيمته معروفة وقت الترجمة ولن تتغير خلال عمر البرنامج.
private const int num = 1729;
public const string title = "Grand" + " Master";
يمكن تطبيق المُعدِّل readonly (ويُستحسن عمومًا ذلك) على أي حقل لا يمكن جعله const، حيث لن تتغير قيمته خلال عمر البرنامج، ويُضبط إما بواسطة مهيّئ مضمّن أو أثناء الإنشاء (بواسطة المنشئ أو طريقة يستدعيها المنشئ).
private readonly int num;
private readonly System.Random rand = new System.Random();
public MyClass(int num)
{
this.num = num;
}
في المواقف الحساسة أمنيًا (أو حتى ببساطة في قاعدة كود كبيرة حيث يكون للمطورين أولويات وأجندات مختلفة)، ينبغي أن تتجنب السماح بالتحايل على واجهة API العامة لأي صنف عبر قبول وتخزين معاملات قابلة للتغيير لإحدى الطرق، أو عبر كشف عضو قابل للتغيير في صنف من خلال قيمة مُرجعة أو كمعامل out.
بينما يمنع المُعدِّل readonly الكتابة فوق القيمة أو المرجع في حقل ما، فإنه لا يوفر أي حماية لأعضاء نوع مرجعي.
readonly List<int> ints = new List<int>();
void Foo()
{
ints.Add(1); // ok
ints = new List<int>(); // fails to compile
}
لضمان حماية جميع أعضاء نوع مرجعي، يمكن جعل الحقول readonly، ويمكن تعريف خصائص تلقائية بدون مُوصِّل set.
توفر مكتبة الصنف الأساسية (BCL) بعض الإصدارات للقراءة فقط من المجموعات عندما تكون هناك حاجة إلى منع تحديث أعضاء المجموعة. وتأتي هذه في شكل أغلفة:
ReadOnlyDictionary<T> استخدام Dictionary<T> للقراءة فقط.ReadOnlyCollection<T> استخدام List<T> للقراءة فقط.نظام المصادقة الذي رأيته آخر مرة في developer-privileges يحتاج إلى بعض العناية. وقد أُوكلت إليك مهمة تنظيف الكود. ولن يقتصر مشروع التنظيف هذا على تسهيل الحياة على القائمين على صيانته مستقبلًا، بل سيكشف عن بعض الثغرات الأمنية ويصلحها.
const
هذه مهمة إعادة هيكلة. أضف المُعدِّل const إلى أي أعضاء في Authenticator أو Identity تراها مناسبة.
readonly
هذه مهمة إعادة هيكلة. أضف المُعدِّل readonly إلى أي حقول في صنف Authenticator أو بنية Identity تراها مناسبة.
أزل مُوصِّل set أو اجعله private لأي خاصية مناسبة في صنف Authenticator أو بنية Identity.
في الوقت الحالي، يُرجع استدعاء Admin حقل هوية المدير. وهذا ليس مثاليًا لأن المستدعي يمكنه تعديل الحقل. ابحث عن طريقة تمنع المستدعي من تعديل تفاصيل المدير على كائن Authenticator.
في الوقت الحالي، يُرجع استدعاء GetDevelopers() القاموس الذي يحتوي على هويات المطوّرين ذوي الامتيازات المضمّنة بشكل ثابت. وهذا ليس مثاليًا لأن المستدعي يمكنه تعديل القاموس. ابحث عن طريقة تمنع المستدعي من تعديل تفاصيل المطوّرين على كائن Authenticator.
سجّل في Exercism لتتعلّم وتتقن C# عبر 62 مفهومًا178 تمرينًا، وإرشاد بشري حقيقي، وكل ذلك مجانًا.