Make your own free website on Tripod.com

دروس مرتبط

 

  صفحه اصلی > آموزش #C >  ویژگی ها (Properties)

   

> معرفی #C

     آغاز کار با #C

     متغیرها،عبارات وعملگرها

     دستورهای کنترلی شرطی

     دستورهای کنترلی حلقه ای

 

> قالب برنامه ها

     کلاسها در #C

     آشنایی با NameSpace

     چگونگی نوشتن متد

     ساختارها (Structure)

 

> کار با کامپوننت ها

     ویژگی ها (Properties)

     صفات (Attribute)( اول)

     صفات (Attribute)( دوم)

     رخدادها و Delegate

     ( اول)

    رخدادها و Delegate

    ( دوم)

    رخدادها و Delegate

    ( سوم)

    کنترل خطاها

 

 
 

  ويژگيها در C#

در اين درس با ويژگيها (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 ها بسيار ساده‌تر پياده‌سازي مي‌گردد. به مثال زير توجه نماييد.

ابتدای صفحهF

مثال 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 صورت مي‌گيرد.

ابتدای صفحهF

ويژگيهاي فقط خواندني (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 اين عمل قابل اجرا است.

 ابتدای صفحهF

ويژگيهاي فقط نوشتني (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) مي‌توان به اجزاي يك شيء همانند يك فيلد دسترسي پيدا كرد. ويژگيها را مي‌توان به صورت فقط خواندني و يا فقط نوشتني نيز ايجاد نمود. با استفاده از ويژگيها دسترسي مستقيم به فيلدهاي مورد نظر از يك كلاس از بين رفته و اين دسترسي تنها از طريق ويژگي مورد نظر امكان‌پذير مي‌گردد.

ابتدای صفحهF  

Back Next

  صفحه اصلی
    C# آموزش
    مفاهیم شی گرایی
    برنامه های نمونه
    کار با محیط
    معرفی کتاب
    نقشه سایت
    درباره ما
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
                               
[صفحه اصلی] [آموزش #C] [مفاهیم شی گرایی] [برنامه های نمونه] [کار با محیط] [معرفی کتاب] [نقشه سایت] [درباره ما]