كيفية القيام بما يلي: قم بتعريف خصائص القراءة/الكتابة واستخدامها (دليل البرمجة لـ #C)

توفر الخصائص التسهيل على الأعضاء العامة دون المخاطر التي تأتي مع الوصول الغير المحمي والغير متحكم والغير متحقق لبيانات الكائن. ويتم تحقيق ذلك عن طريق accessors: أساليب خاصة تقوم بتعيين واسترداد القيم من بيانات العضو المصدر. accessor التعيين يعيّن القيم للأعضاء و accessor الحصول يقوم باسترداد قيم الأعضاء.

يُظهر هذا النموذج فئة Person ولديها خاصيتين: Name (سلسلة حرفية) و Age (عدد صحيح). كلا الخاصيتين توفران الـ accessors get و set لذلك يتم اعتبارهما خصائص للقراءة/الكتابة.

مثال

class Person
{
    private string name = "N/tcA";
    private int age = 0;

    // Declare a Name property of type string:
    public string Name
    {
        get
        {
            return name;
        }
        set
        {
            name = value;
        }
    }

    // Declare an Age property of type int:
    public int Age
    {
        get
        {
            return age;
        }

        set
        {
            age = value;
        }
    }

    public override string ToString()
    {
        return "Name = " + Name + ", Age = " + Age;
    }
}

class TestPerson
{
    static void Main()
    {
        // Create a new Person object:
        Person person = new Person();

        // Print out the name and the age associated with the person:
        Console.WriteLine("Person details - {0}", person);

        // Set some values on the person object:
        person.Name = "Joe";
        person.Age = 99;
        Console.WriteLine("Person details - {0}", person);

        // Increment the Age property:
        person.Age += 1;
        Console.WriteLine("Person details - {0}", person);

        // Keep the console window open in debug mode.
        Console.WriteLine("Press any key to exit.");
        Console.ReadKey();
    }
}
/* Output:
    Person details - Name = N/tcA, Age = 0
    Person details - Name = Joe, Age = 99
    Person details - Name = Joe, Age = 100
*/

برمجة نشطة

في المثال السابق، الخصائص Name و Age خصائص عامة وتحتويان على الـ accessors get و set. يسمح هذا لأي كائن لقراءة وكتابة هذه الخصائص. ولكن، في بعض الأحيان يكون من المرغوب استثناء أحد الـ accessors. إهمال الـ accessor set، على سبيل المثال، يجعل الخاصية قابلة للقراءة فقط:

public string Name
{
    get
    {
        return name;
    }
}

بدلاً من ذلك، يمكنك كشف أحد الـ accessors للعامة ولكن تجعل الآخر خاص أو محمي. للحصول على معلومات أكثر, راجع الوصول للـ Accessor الغير متماثل.

حالما يتم التصريح عن الخصائص يمكن استخدامها كحقول لفئة. يسمح هذا ليكون بناء الجملة طبيعياً عند إحضار وتعيين قيمة الخاصية كما في العبارات التالية:

person.Name = "Joe";
person.Age = 99;

لاحظ أنه في أسلوب set للخاصية يتوفر متغير خاص value. يتضمن هذا المتغير القيمة المحددة من المستخدم, على سبيل المثال:

name = value;

لاحظ بناء الجملة النظيف لزيادة الخاصية Age في الكائن Person:

person.Age += 1;

لو تم استخدام أساليب set و get منفصله لصياغة الخصائص، تكون التعليمات البرمجية المكافئة كما يلي:

person.SetAge(person.GetAge() + 1); 

يتم تجاوز الأسلوب ToString في هذا المثال:

public override string ToString()
{
    return "Name = " + Name + ", Age = " + Age;
}

لاحظ أنه لم يتم استخدام ToString بوضوح في البرنامج. يتم استدعاؤه افتراضياً بواسطة استدعاءات WriteLine.

راجع أيضًا:

المرجع

الخصائص (دليل البرمجة لـ #C)

الفئات والبنيات (دليل البرمجة لـ #C)

المبادئ

دليل البرمجة لـ #C