پاسخ به نظرات

پاسخ سوال:

در حالت کلی پراپرتی(property) در کنار فیلدها تعریف میشوند و دلیل اصلی اون مسئله امنیت برنامه هست.برای این که مفهوم را بهتر درک کنید یه مثال میزنم.این مثال ابتدا بدون استفاده از پراپرتی وسپس با استفاده از پراپرتی مطرح شده.

مثال بدون پراپرتی:

فرض کنید یه console application ساختید و در کلاس program یه متد ساختید بنام GetCircleArea.این متد کارش محاسبه مساحت دایره است.همونطور که میدونید مساحت دایره برابر است با 3.14 ضرب در شعاع به توان دو.اما اگه یادتون باشه استادان ریاضی میگفتن که میتونید 3.14 را 3.0 نیز بگیرید، تقریبا جواب بدست می آید.این متد ما به عنوان ورودی شعاع را میگیرد.و ما نیز می خواهیم این امکان را به کاربر بدهیم که خود(pi=3.14) را تعیین کند ، یعنی قادر باشد به Pi حتی 3 نیز بدهد.خوب برای این کار باید یه فیلدی از نوع float در نظر بگیریم برای پذیرفتن pi.این فیلد را این چنین تعریف میکنیم:

public float pi;

دلیل اینکه Pi را public تعریف کردیم این است که کاربر میتواند به آن مقدار دهد.این کار برای سادگی از متد main انجام میدهیم یعنی کاربر در main برنامه فرضا می نویسد:

pi = 3.14 f ;

GetCircleArea ( 2 );

دوست عزیز دقت کن ، در این جا چون pi را public تعریف کردیم کاربر می تواند حتی مقدار 2.2 هم به ان بدهد.این طور نیست؟و اگر این کار را بکند دیگر متد GetCircleArea مساحت را اشتباه حساب خواهد کرد.در مثال بالا متد GetCircleArea شعاع 2 را گرفته و چون قبل از اون Pi را کاربر 3.14 تعریف کرده مساحت درست محاسبه میشه اما همونطور که گفتم اگه بجای pi مقدار 2.2 یا هرچی غیر از بازه (3.14 ،3) قرار دهد مساحت اشتباه محاسبه میشود.

در واقع یکی از رکن های برنامه نویسی شی گرا میگه تا جایی که میتونی روند انجام کار برنامتو از دید کاربری که باهاش قراره کار کنه مخفی کن.(encapsulation)

بر اساس این رکن، شما با public کردن فیلد خود، ان را رعایت نکردید زیرا عدد pi یکی از اصلی ترین جزء های روند برنامتون بوده و باید اونو مخفی می کردید تا مشکلاتی از قبیل بالا پیش نیاد.حالا راه حل چیه؟

مثال با استفاده از property:

راه حل استفاده از property هست.شما میتونید فیلد pi را private تعریف کنید و در عوض یه property براش بنویسید که فقط بازه 3 تا 3.14 را بپذیره به شرح زیر:

private float pi = 3.14F;

public float PI

{

get { return pi;}

set

        if( value >=3 && value<=3.14 )

                   pi = value ;

}

}

الان دیگه شما نگران این نخواهید بود که کاربر مثلا 2.2 را به پراپرتی PI بدهد زیرا این مقدار در فیلد pi قرار نخواهد گرفت تا بعدا در محاسبات منجر به ایجاد خطا شود.من در بالا مقدار پیش فرض فیلد pi را 3.14 گذاشتم تا اگه کاربر به پراپرتی PI مقداری خارج از بازه ی 3 تا 3.14 داد ، همان مقدار پیش فرض در محاسبه بکار رود.

امیدوارم متوجه فرق فیلد و پراپرتی شده باشید.البته این را بگویم که وجود پراپرتی نیازی به وجود داشتن فیلدی مرتبط با اون در همون کلاس نداره.بعضی از پراپرتی ها کارشان مقدار دادن به فیلدی در کلاسی دیگر است.و چیزی که بر میتواند گردانند یک شی از اون کلاس خواهد بود.


مطالب مشابه :


پاسخ به نظرات

سی شارپ نویسی از پراپرتی مطرح شده. مثال بدون پیش نیاد.حالا راه حل چیه؟ مثال با




آموزش زبان برنامه نویسی سی شارپ

آموزش زبان برنامه نویسی سی شارپ برای حل این است تعریف شده باشد. در مثال زیر ما




مقدمه اي بر سي شارپ : قسمت بيستم

شهر سی شارپ در مثال زير از دو تابع براي شرح اين مطلب سود جسته شده است:




آشنایی با کلاسها و اشیا (1)

ادامه مطالب آموزش سی شارپ مقدماتی نمونه شی ساخته شده مثال اگر نام فایل را




LINQ به زبان ساده

کدهای به درد بخور سی شارپ و نمی دونم شده تا بحال با خودتون فکر شاید با حل یک مثال بهتر




برچسب :