View Full Version : سوال: ایجاد چند خاصیت با اسمهای مختلف با GET , SET
sonixax
پنج شنبه 09 دی 1389, 05:25 صبح
سلام به همگی
سوالم همینه ، چه طوری میشه این کار رو کرد ؟
مثل خاصیت Length که از نوع داده ای String میاد ؟
خیلی ممنون :قلب:
flash118
پنج شنبه 09 دی 1389, 07:25 صبح
دوست عزیز میشه واضح تر منظورتون رو بیان کنید
class TimePeriod
{
private double _seconds;
public double Seconds
{
get { return _seconds; }
set { _seconds = value; }
}
}
همان طور که می بینید دوتا متغییر داریم یکی محلی دیگری سراسری درواقع در خارج از کلاس سراسری فراخوانی میشه اگه مقدار بگیره بلوک set فراخوانی میشه اگه مقدار برگردونه که بلوک get
دوست عزیز length هم یه خصوصیت از کلاس string هست با همین ساختار که در بالا اشاره شد امیدوارم موفق باشی در پناه حق
sonixax
پنج شنبه 09 دی 1389, 08:43 صبح
من يك مقداري سر اي خصوصيت ها گيج شدم ممكنه يك ريفرنس در بارشون بهم بديد ؟
abbas.oveissi
پنج شنبه 09 دی 1389, 14:21 عصر
در اين درس با ويژگيها (Properties) در زبان C# آشنا خواهيم شد. اهداف اين درس به شرح زير ميباشد :
موارد استفاده از Property ها
پيادهسازي Property
ايجاد Property فقط خواندني (Read-Only)
ايجاد Property فقط نوشتني (Write-Only)
Property ها امكان ايجاد حفاظت از فيلدهاي يك كلاس را از طريق خواندن و نوشتن بوسيله Property را فراهم مينمايد. Property ها علاوه بر اينكه از فيلدهاي يك كلاس حفاظت ميكنند، همانند يك فيلد قابل دسترسي هستند. بمنظور درك ارزش Property ها بهتر است ابتدا به روش كلاسيك كپسوله كردن متدها توجه نماييد.
مثال 1-10 : يك نمونه از چگونگي دسترسي به فيلدهاي كلاس به طريقه كلاسيك
using System;
public class PropertyHolder
{
private int someProperty = 0;
public int getSomeProperty()
{
return someProperty;
}
public void setSomeProperty(int propValue)
{
someProperty = propValue;
}
}
public class PropertyTester
{
public static int Main(string[] args)
{
PropertyHolder propHold = new PropertyHolder();
propHold.setSomeProperty(5);
Console.WriteLine("Property Value: {0}", propHold.getSomeProperty());
return 0;
}
}
مثال 1-10 روش كلاسيك دسترسي به فيلدهاي يك كلاس را نشان ميدهد. كلاس PropertyHolder داراي فيلدي است تمايل داريم به آن دسترسي داشته باشيم. اين كلاس داراي دو متد getSomeProperty() و setSomePropery() ميباشد. متد getSomeProperty() مقدار فيلد someProperty را باز ميگرداند و متد setSomeProperty() مقداري را به فيلد someProperty تخصيص ميدهد.
كلاس PropertyTester از متدهاي كلاس PropertyHolder جهت دريافت مقدار فيلد someProperty از كلاس PropertyHolder استفاده ميكند. در متد Main() نمونه جديدي از شي PropertyHolder با نام propHold ايجاد ميگردد. سپس بوسيله متد setSomeProperty، مقدار someMethod از propHold برابر با 5 ميگردد و سپس برنامه مقدار property را با استفاده از فراخواني متد Console.WriteLine() در خروجي نمايش ميدهد. آرگومان مورد استفاده براي بدست آوردن مقدار property فراخواني به متد getSomeProperty() است كه توسط آن عبارت “Property Value : 5” در خروجي نمايش داده ميشود.
چنين متد دسترسي به اطلاعات فيلد بسيار خوب است چرا كه از نظريه كپسوله كردن شيءگرايي پشتيباني ميكند. اگر پيادهسازي someProperty نيز تغيير يابد و مثلا از حالت int به byte تغيير يابد، باز هم اين متد كار خواهد كرد. حال همين مسئله با استفاده از خواص Property ها بسيار سادهتر پيادهسازي ميگردد. به مثال زير توجه نماييد.
مثال 2-10 : دسترسي به فيلدهاي كلاس به استفاده از Property ها
using System;
public class PropertyHolder
{
private int someProperty = 0;
public int SomeProperty
{
get
{
return someProperty;
}
set
{
someProperty = value;
}
}
}
public class PropertyTester
{
public static int Main(string[] args)
{
PropertyHolder propHold = new PropertyHolder();
propHold.SomeProperty = 5;
Console.WriteLine("Property Value: {0}", propHold.SomeProperty);
return 0;
}
}
مثال 2-10 چگونگي ايجاد و استفاده از ويژگيها (Property) را نشان ميدهد. كلاس PropertyHolder داراي پيادهسازي از ويژگي SomeProperty است. توجه نماييد كه اوليد حرف از نام ويژگي با حرف بزرگ نوشته شده و اين تنها تفاوت ميان اسم ويژگي SomeProperty و فيلد someProperty ميباشد. ويژگي داراي دو accessor با نامهاي set و get است. accessor get مقدار فيلد someProperty را باز ميگرداند. set accessor نيز با استفاده از مقدار value، مقداري را به someProperty تخصيص ميدهد. كلمه value كه در set accessor آورده شده است جزو كلمات رزرو شده زبان C# ميباشد.
كلاس PropertyTester از ويژگي someProperty مربوط به كلاس PropertyHolder استفاده ميكند. اولين خط در متد Main() شياي از نوع PropertyHolder با نام propHold ايجاد مينمايد. سپس مقدار فيلد someProperty مربوط به شيء propHold، با استفاده از ويژگي SomeProperty به 5 تغيير مييابد و ملاحظه مينماييد كه مسئله به همين سادگي است و تنها كافي است تا مقدار مورد نظر را به ويژگي تخصيص دهيم.
پس از آن، متد Console.WriteLine() مقدار فيلد someProperty شيء propHold را چاپ مينمايد. اين عمل با استفاده از ويژگي SomeProperty شيء propHold صورت ميگيرد.
ويژگيهاي فقط خواندني (Read-Only Properties)
ويژگيها را ميتوان طوري ايجاد نمود كه فقط خواندني (Read-Only) باشند. براي اين منظور تنها كافيست تا در ويژگي فقط از get accessor استفاده نماييم. به مثال زير توجه نماييد.
مثال 3-10 : ويژگيهاي فقط خواندني
using System;
public class PropertyHolder
{
private int someProperty = 0;
public PropertyHolder(int propVal)
{
someProperty = propVal;
}
public int SomeProperty
{
get
{
return someProperty;
}
}
}
public class PropertyTester
{
public static int Main(string[] args)
{
PropertyHolder propHold = new PropertyHolder(5);
Console.WriteLine("Property Value: {0}", propHold.SomeProperty);
return 0;
}
}
مثال 3-10 چگونگي ايجاد يك ويژگي فقط خواندني را نشان ميدهد. كلاس PropertyHolder داراي ويژگي SomeProperty است كه فقط get accessor را پيادهسازي ميكند. اين كلاس PropertyHolder داراي سازندهايست كه پارامتري از نوع int دريافت مينمايد.
متد Main() از كلاس PropertyTester شيء جديدي از PropertyHolder با نام propHold ايجاد مينمايد. اين نمونه از كلاس PropertyHolder از سازندة آن كه مقداري صحيح را بعنوان پارامتر دريافت ميكند، استفاده ميكند. در اين مثال اين مقدار برابر با 5 در نظر گرفته ميشود. اين امر باعث تخصيص داده شدن عدد 5 به فيلد someProperty از شيء propHold ميشود.
تا زمانيكه ويژگي SomeProperty از كلاس PropertyHolder فقط خواندني است، هيچ راهي براي تغيير مقدار فيلد someProperty وجود ندارد. بعنوان مثال در صورتيكه عبارت propHold.SomeProperty = 7 را در كد برنامه اضافه نماييد، برنامة شما كامپايل نخواهد شد چراكه ويژگي SomeProperty فقط خواندني است. اما اگر از اين ويژگي در متد Console.WriteLine() استفاده نماييد بخوبي كار خواهد كرد زيرا اين دستور تنها يك فرآيند خواندن است و با استفاده از get accessor اين عمل قابل اجرا است.
ويژگيهاي فقط نوشتني (Write-Only Properties)
به مثال زير توجه فرماييد :
مثال 4-10 : ويژگيهاي فقط خواندني
using System;
public class PropertyHolder
{
private int someProperty = 0;
public int SomeProperty
{
set
{
someProperty = value;
Console.WriteLine("someProperty is equal to {0}", someProperty);
}
}
}
public class PropertyTester
{
public static int Main(string[] args)
{
PropertyHolder propHold = new PropertyHolder();
propHold.SomeProperty = 5;
return 0;
}
}
مثال 4-10 چگونگي ايجاد و استفاده از ويژگي فقط نوشتني را نشان ميدهد. در اين حالت get accessor را از ويژگي SomeProperty حذف كرده و به جاي آن set accessor را قرار دادهايم.
متد Main() كلاس PropertyTester شياي جديد از همين كلاس با سازندة پيش فرض آن ايجاد مينمايد. سپس با استفاده از ويژگي SomeProperty از شيء propHold، مقدار 5 را به فيلد someProperty مربوط به شيء propHold تخصيص ميدهد. در اين حالت set accessor مربوط به ويژگي SomeProperty فراخواني شده و مقدار 5 را به فيلد someProperty تخصيص ميدهد و سپس عبارت someProperty is equal to 5” “را در خروجي نمايش ميدهد.
خلاصه
در اين درس با ويژگيها آشنا شديد و نحوه استفاده از آنها را فرا گرفتيد. روشهاي كلاسيك كپسوله كردن از طريق استفاده از متدهاي مجزا صورت ميگرفت ولي با استفاده از ويژگيها (Property) ميتوان به اجزاي يك شيء همانند يك فيلد دسترسي پيدا كرد. ويژگيها را ميتوان به صورت فقط خواندني و يا فقط نوشتني نيز ايجاد نمود. با استفاده از ويژگيها دسترسي مستقيم به فيلدهاي مورد نظر از يك كلاس از بين رفته و اين دسترسي تنها از طريق ويژگي مورد نظر امكانپذير ميگردد.
abbas.oveissi
پنج شنبه 09 دی 1389, 14:24 عصر
در اين درس با ويژگيها (Properties) در زبان C# آشنا خواهيم شد. اهداف اين درس به شرح زير ميباشد :
موارد استفاده از Property ها
پيادهسازي Property
ايجاد Property فقط خواندني (Read-Only)
ايجاد Property فقط نوشتني (Write-Only)
این مقاله برای من نیستاااا :لبخند: از سایت cslearning عیناً کپی کردم براتون ، چون سایتش فیلتر بود . امیدوارم بدردتون بخوره
sonixax
پنج شنبه 09 دی 1389, 19:31 عصر
این مقاله برای من نیستاااا :لبخند: از سایت cslearning عیناً کپی کردم براتون ، چون سایتش فیلتر بود . امیدوارم بدردتون بخوره
خیلی ممنون از کمکتون - من ایران نیستم برای همین مشکل فیلتر ندارم - ولی با همه این حال خیلی خیلی ازتون ممنونم .
abbas.oveissi
جمعه 10 دی 1389, 02:23 صبح
من ایران نیستم برای همین مشکل فیلتر ندارم
خوش به حالت :( حالا فیلتر هیچی بگو یه اینترنت داری که واقعا اینترنت هست نه این سرعتی که تو ایران داره ........
vBulletin® v4.2.5, Copyright ©2000-1403, Jelsoft Enterprises Ltd.