Make your own free website on Tripod.com

دروس مرتبط

 

  صفحه اصلی > آموزش #C > کلاسها در #C 

   

> معرفی #C

     آغاز کار با #C

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

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

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

 

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

     کلاسها در #C

     آشنایی با NameSpace

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

     ساختارها (Structure)

 

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

     ویژگی ها (Properties

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

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

     رخدادها و Delegate

     ( اول)

    رخدادها و Delegate

    ( دوم)

    رخدادها و Delegate

    ( سوم)

    کنترل خطاها

 

 
 

آشنايي با كلاسها در C#

در اين درس با كلاسها در زبان C# آشنا خواهيد شد. اهداف اين درس به شرح زير مي‌باشند :


      پياده‌سازي سازنده‌ها (Constructors)
      درك تفاوت بين اعضاي نمونه (Instance) و استاتيك (Static)
      آشنايي با تخريب كننده‌ها (Destructors)
      آشنايي با اعضاي كلاسها
 

در تمامي مطالبي كه در اين سايت مشاهده كرده‌ايد، برنامه‌ها داراي كلاس‌هايي بوده‌اند. در حال حاضر بايد درك نسبي از كلاسها و كار آنها و چگونگي ايجاد آنها داشته باشيد. در اين درس مروري بر آموخته‌هاي قبلي از كلاسها خواهيم كرد و نيز با اعضاي كلاسها آشنا مي‌شويم.

 

يك كلاس با استفاده از كلمه كليدي class كه بدنبال آن نام كلاس آمده باشد، اعلان مي‌گردد و اعضاي اين كلاس درون {} اعلان مي‌گردند. هر كلاس داراي سازنده‌اي مي‌باشد كه در هربار ايجاد نمونه‌اي جديد از آن كلاس، بصورت خودكار فراخواني مي‌گردد. هدف از سازنده، تخصيص‌دهي اعضاي كلاس در زمان ايجاد نمونه‌اي جديد از كلاس است. سازنده‌ها داراي مقادير بازگشتي نبوده و همواره نامي مشابه نام كلاس دارند. مثال 1-7 نمونه‌اي از يك كلاس را نشان مي‌دهد.

// Namespace اعلان

using System;

 

class OutputClass

{

string myString;

// سازنده

public OutputClass(string inputString)

{

myString = inputString;

}

 // متد نمونه

public void printString()

{

Console.WriteLine("{0}", myString);

}

// تخريب كننده

~OutputClass()

{

// روتيني جهت آزادسازي برخي از منابع سيستم

}

}

// كلاس آغازين برنامه

class ExampleClass

{

// آغاز اجراي برنامه

public static void Main()

{

// OutputClass نمونه‌اي از

OutputClass outCl = new OutputClass("This is printed by the output class.");

 // Output فراخواني متد كلاس

outCl.printString();

}

}

در مثال 1-7 دو كلاس ديده مي‌شوند. كلاس بالايي، كلاس OutPutClass، داراي سازنده، متد نمونه و يك تخريب كننده است. همچنين اين كلاس داراي فيلدي با نام myString است. توجه نماييد كه چگونه سازنده اين كلاس اعضاي آنرا تخصيص‌دهي(مقداردهي) مي‌نمايد. در اين مثال، سازنده كلاس رشته‌ ورودي (inputString) را بعنوان آرگومان خود دريافت مي‌نمايد. سپس اين مقدار داخل فيلد كلاس يعني myString كپي مي‌گردد.

 

همانطور كه در ExampleClass مشاهده مي‌نماييد، استفاده از سازنده الزامي نمي‌باشد. در اين مورد سازنده پيش فرض ايجاد مي‌گردد. سازنده پيش فرض، سازنده‌اي بدون هيچ نوع آرگوماني است. البته شايان ذكر است كه سازنده‌هاييي بدون آرگومان هميشه مورد استفاده نبوده و مفيد نيستند. جهت كارآمد كردن بيشتر سازنده‌هاي بدون آرگومان بهتر است آنها را با تخصيص‌دهنده (Initializers) پياده‌سازي نماييد. به مثال زير در اين زمينه توجه نماييد :

public OutputClass() : this("Default Constructor String") { }

فرض كنيد اين عبارت در كلاس OutPutClass در مثال 1-7 قرار داشت. اين سازنده پيش فرض به يك تخصيص‌دهنده همراه شده است. ":" ابتداي تخصيص‌دهنده را مشخص ‌مي‌نما‌يد، و به دنبال آن كلمه كليدي this آمده است. كلمه كليدي this به شيء كنوني اشاره مي‌نمايد. استفاده از اين كلمه، فراخواني به سازنده شيء كنوني كه در آن تعريف شده است، ايجاد مي‌كند. بعد از كلمه كليدي this ليست پارامترها قرار مي‌گيرد كه در اينجا يك رشته است. عملي كه تخصيص‌دهنده فوق انجام مي‌دهد، باعث مي‌شود تا سازنده OutPutClass رشته‌اي را بعنوان آرگومان دريافت نمايد. استفاده از تخصيص‌دهنده‌ها تضمين مي‌نمايند كه فيلدهاي كلاس شما در هنگام ايجاد نمونه‌اي جديد مقدار‌دهي مي‌شوند.

 

مثال فوق نشان داد كه چگونه يك كلاس مي‌تواند سازنده‌هاي متفاوتي داشته باشد. سازنده‌اي كه فراخواني مي‌شود، به تعداد و نوع آرگومانهايش وابسته است.

ابتدای صفحهF

در زبان C#، اعضاي كلاسها دو نوع مي‌باشند : اعضاي نمونه و استاتيك.  اعضاي نمونه كلاس متعلق به رخداد خاصي از كلاس هستند. هربار كه شي‌اي از كلاسي خاص ايجاد مي‌كنيد، در حقيقت نمونه‌ جديدي از آن كلاس ايجاد كرده‌ايد. متد Main() در كلاس ExampleClass نمونه جديدي از OutPutClass را تحت نام outCl ايجاد مي‌نمايد. مي‌توان نمونه‌هاي متفاوتي از كلاس OutPutClass را با نامهاي مختلف ايجاد نمود. هر يك از اين نمونه‌هاي مجزا بوده و به تنهايي عمل مي‌كنند. به عنوان مثال اگر دو نمونه از كلاس OutPutClass همانند زير ايجاد نماييد :

OutputClass oc1 = new OutputClass("OutputClass1");

OutputClass oc2 = new OutputClass("OutputClass2");

 

با اين اعلان، شما دو نمونه از كلاس OutPutClass را ايجاد كرده‌ايد كه يك از آنها داراي فيلد myString و متد printString() هستند و اين فيلدها و متدها كاملاً از يكديگر مجزا مي‌باشند. به بيان ديگر درصورتيكه عضوي از كلاس استاتيك باشد از طريق ساختار نوشتاري <class name>.<static class member> قابل دسترس خواهد بود. در اين مثال نمونه‌ها oc1 و oc2 هستند. فرض كنيد كلاس OutPutClass داراي متد استاتيك زير باشد :

public static void staticPrinter()

{

  Console.WriteLine("There is only one of me.");

}

اين متد را از درون متد Main() به صورت زير مي‌توانيد فراخواني نماييد :

OutputClass.staticPrinter();

اعضاي استاتيك يك كلاس تنها از طريق نام آن كلاس قابل دسترس مي‌باشند و نه از طريق نام نمونه ايجاد شده از روي كلاس. بدين ترتيب براي فراخواني اعضاي استاتيك يك كلاس نيازي به ايجاد نمونه از روي آن كلاس نمي‌باشد. همچنين تنها يك كپي از عضو استاتيك كلاس، در طول برنامه موجود مي‌باشد. يك مورد استفاده مناسب از اعضاي استاتيك در مواردي است كه تنها يك عمل بايد انجام گيرد و در انجام اين عمل هيچ حالت مياني وجود نداشته باشد، مانند محاسبات رياضي. در حقيقت، .Net Framework BCL خود داراي كلاس Math مي‌باشد كه از اعضاي استاتيك بهره مي‌برد.

 

نوع ديگر سازنده‌ها، سازنده‌هاي استاتيك هستند. از سازنده‌هاي استاتيك جهت مقدار‌دهي فيلدهاي استاتيك يك كلاس استفاده مي‌شود. براي اعلان يك سازنده استاتيك تنها كافيست كه از كلمه كليدي static در جلوي نام سازنده استفاده نماييد. سازنده استاتيك قبل از ايجاد نمونه جديدي از كلاس، قبل از فراخواني عضو استاتيك و قبل از فراخواني سازنده استاتيك كلاس مشتق شده، فراخواني مي‌گردد. اين سازنده‌ها تنها يكبار فراخواني مي‌شوند.

ابتدای صفحهF 

OutPutClass همچنين داراي يك تخريب‌كننده (Destructor) است. تخريب‌كننده‌ها شبيه به سازنده‌ها هستند، با اين تفاوت كه در جلوي خود علامت "~" را دارا مي‌باشند. هيچ پارامتري دريافت نكرده و هيچ مقداري باز نمي‌گردانند. از تخريب‌كننده‌ها مي‌توان در هر نقطه از برنامه كه نياز به آزادسازي منابع سيستم كه در اختيار كلاس يا برنامه است، استفاده نمود. تخريب‌كننده‌ها معمولاً زماني فراخواني مي‌شوند كه Garbage Collector زبان C# تصميم به حذف شيء مورد استفاده برنامه از حافظه و آزادسازي منابع سيستم، گرفته باشد. (Garbage Collector يا GC، يكي از امكانات .Net Framework مخصوص زبان C# است كه سيستم بصورت اتوماتيك اقدام به آزادسازي حافظه و باز گرداندن منابع بلا استفاده به سيستم مي‌نمايد. فراخواني GC بصورت خودكار رخ مي‌دهد مگر برنامه‌نويس بصورت صريح از طريق تخريب‌كننده‌ها آنرا فراخواني نمايد. در مباحث پيشرفته‌تري كه در آينده مطرح مي‌كنيم خواهيد ديد كه در چه مواقعي نياز به فراخواني تخريب‌كننده‌ها بصورت شخصي داريد.)

ابتدای صفحهF

تا كنون، تنها اعضاي كلاس كه با آنها سر و كار داشته‌ايد، متدها، فيلدها، سازنده‌ها و تخريب‌كننده‌ها بوده‌اند در زير ليست كاملي از انواعي را كه مي‌توانيد در كلاس از آنها استفاده نماييد آورده شده است :

   Constructors

   Destructors

   Fields

   Methods

   Properties

   Indexers

   Delegates

   Events

   Nested Classes

مواردي كه در اين درس با آنها آشنا نشديد، حتماً در درس‌هاي آينده مورد بررسي قرار خواهند گرفت.

 

خلاصه

در اين درس نحوه اعلان سازنده‌هاي استاتيك و نمونه را فرا گرفتيد و با نحوه مقداردهي به فيلدها آشنا شديد. زمانيكه نياز به ايجاد نمونه از روي شيء نباشد از اعضاي استاتيك كلاس استفاده مي‌كنيم. با استفاده از تخريب‌كننده‌ها مي‌توانيد منابع بلا استفاده را به سيستم باز گردانيد.

ابتدای صفحهF

Back Next

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