Avatar ·

ما الفرق بين الحقل (field) والخاصية (property) في C#؟

مرحبًا أيها الزملاء! أنا مطور C# مبتدئ ولا أستطيع فهم الفرق بين الحقل والخاصية. يبدو أن كلاهما يخزن البيانات، فلماذا إذن اخترعوا الخصائص؟ لدي كلاس `Person`. يمكنني الكتابة هكذا: ```csharp public class Person { public string Name; } ``` وهذا حقل. لكني أرى أن الكثيرين يكتبون هكذا: ```csharp public class Person { private string name; public string Name { get { return name; } set { name = value; } } } ``` وهذه خاصية. كلا الخيارين يبدو أنهما يعملان بنفس الطريقة: يمكنني تعيين قيمة وقراءتها. على سبيل المثال: ```csharp Person p = new Person(); p.Name = "أليكسي"; Console.WriteLine(p.Name); ``` النتيجة ستكون متطابقة. فلماذا إذن نعقد الأمور بـ `get` و `set`؟ لماذا لا نستخدم دائمًا الحقول العامة فقط؟ سمعت أن هذا مرتبط بالتغليف (encapsulation)، لكني لا أفهم كيف تحسن الخاصية ذلك إذا كان بإمكاني مع ذلك كتابة أي قيمة. اشرحوا لي، من فضلكم.