PDA

View Full Version : سوال: درباره خواص (properties)



IMANAZADI
چهارشنبه 30 آذر 1390, 15:15 عصر
با سلام
کسی از دوستان هست در مورد خواص یا همون properties در dotnet 4 منو راهنمایی کنه
در مورد متغییر ها باید اعمال کرد
حکایت این get , set چیست

به چه کار می آد ؟
کجا باید استفاده کنیم ؟

اگر هم مثال باشه که چه بهتر

b.saminjad
چهارشنبه 30 آذر 1390, 21:03 عصر
سلام دوست عزیز

با خواص شما می تونید یک متغیر مقدار دهی کنید(به وسیله set) یا مقدارشو برگردونید (به وسیله get

دراینجا valuex یک خاصیته که x مقدار دهی میکنه (set) و مقدارشو برمیگردونه (get
class Class1
{
int x;

public int valuex
{
set
{
x=value;
}

get
{
return x



{ {

IMANAZADI
پنج شنبه 01 دی 1390, 11:06 صبح
خوب دوست عزیز اگر متغییر x رو بصورت زیر مقدار دهی کنیم چه اشکالی داره
x=10;
کاربرد properties کجاست ؟؟؟

b.saminjad
پنج شنبه 01 دی 1390, 13:21 عصر
با سلام دوباره

فرض کن میخاستی مقدار x مستقیم قابل دسرس نباشه ولی بشه مقدار دهیش کرد یا مقدارشو گرفت ما باید برای این کار دو متد می نوشتیم
ولی به جاش میایم از خاصیت استفاده می کنیم

به صورت کلی کارش اینه که یک متغیرو مقدار دهی کنه(اگه set نوشته باشیم براش) ومقدارشو برگردونه (اگه get داشته باشه)

IMANAZADI
پنج شنبه 01 دی 1390, 14:31 عصر
پس تنها کاربردش اینه که مستقیم مقدار دهی نکنیم ؟؟؟

b.saminjad
پنج شنبه 01 دی 1390, 14:39 عصر
اره کنترل یک متغیرو با set و get بر عهده داره

سوداگر
پنج شنبه 01 دی 1390, 14:54 عصر
پس تنها کاربردش اینه که مستقیم مقدار دهی نکنیم ؟؟؟

تا حدودی آره، تا حدودی هم نه!
فرض کنید به شما گفته اند که یک کلاس برای ماشین مسابقه بسازید. این ماشین مسابقه چند Property دارد از جمله تعداد درب، سرعت و ... حالا اگر ما سرعت را به صورت Public float Speed تعریف کنیم، اون شخصی که از اون کلاس استفاده میکنه ممکنه این مطلب رو ندونه و بیاد و مقدار 1000 و یا بیشتر را به این Property بدهد! در نتیجه تمامی محاسباتش بهم خواهد خورد، و همینطور تعداد درب خودرو مقداری است معلوم (2,6,8,4) این شما هستید که باید با get , set، این موارد را محدود کنید.
برای مثال، کلاس car را در نظر بگیرید:
class car
{
public string Color;
private int _speed;
// Speed - Read-Only property to return the speed
public int Speed
{
get
{
return _speed;
}
}
// Accelerate - Add kmph to the speed
public void Accelerate(int accelerateBy)
{
// Adjust the speed
_speed += accelerateBy;
}
private int _numberOfDoors;

// Constructor
public car()
{
// Set the default values
Color = "White";
_speed = 0;
_numberOfDoors = 4;
}
public int HorsePower;
// NumberOfDoors - get/set the number of doors
public int NumberOfDoors
// Called when the property is read
{
get
{
return _numberOfDoors;
}
// Called when the property is set
set
{
// Is the new value between two and six
if (value >= 2 && value <= 6)
{
_numberOfDoors = value;
}
}
}

// IsMoving - is the car moving?
public Boolean IsMoving()
{
// Is the car's speed zero?
if (Speed == 0)
return false;
return true;
}


// CalculateAccelerationRate –
// assume a constant for a normal car
public virtual double CalculateAccelerationRate()
{
// If we assume a normal car goes from 0-60 in
// 14 seconds, that's an average of 4.2 kmph/s
return 4.2;
}

}
موفق باشید.

gwbasic
پنج شنبه 01 دی 1390, 14:55 عصر
یکی ار کاربردهای پراپرتی ها مدیریت فیلد ها می باشد یعنی شما می تونید کنترل کنید که چه مقداری داخل یک فیلد ذخیره می شه. مثلا فرض کنید که یک فیلدgrade‌ دارید که می خواید فقط شامل اعداد صحیح بین 0 تا 20 باشه این کنترل از طریق پراپرتی انجام می شه

public int Grade
{
get { return grade; }
set
{
if (grade < 0 && grade > 20)
throw new Exception("Invalid Value for Grade");
grade = value;
}
}


و یا اینکه شما می خواین هر وقت این فیلد تغییر کرد اعلام کنید (Notify) در اینجا باز هم از پراپرتی استفاده می شه. یکی از کاربردهای این موضوع وصل کردن فیلد به کنترل های فرم هست (مثلا TextBox) این کار باعث می شه که باتغییر فیلد شما کنترل مربوطه نیز تغییر کنه برای آشنایی بیشتر به آموزش DataBinding من مراجعه کنید

و یا اینکه اصلا پراپرتی می تونه روی فیلدی تعریف نشه:

public string FullName
{
get
{
return "Mohsen Jamshidi";
}
}