کلاس ها در سی شارپ

در دنیای برنامه نویسی شی گرا ، یک کلاس دارای تعدادی مشخص  فیلد ، صفت ، رویداد و متد است. یک کلاس انواع داده  و عملکرد هایی که اشیا دارند را مشخص میکند.


کلاس

یک کلاس مانند نقشه ای کامل از یک شی مشخص است. در جهان واقعی هر شی ایی دارای یک سری خصوصیات مانند رنگ ، شکل و نوع عملکرد است. برای مثال شما یک اتومبیل فراری را درنظر بگیرید. فراری یک شی از نوع اتومبیل است و اتومبیل در اینجا نقش کلاس را برای ما بازی میکند. یک کلاس اتومبیل میتواند دارای خصوصیات معینی مانند سرعت ، رنگ و شکل باشد.

بنابراین هر شرکت خودرو سازی که یک اتومبیل را با ویژگی های مورد نظرش تولید کند، شی ایی از یک اتومبیل را ساخته است. با این اوصاف اتومبیل های فراری ، لامبورگینی و کادیلاک همگی شی ایی از کلاس اتومبیل هستند.

در دنیای برنامه نویسی شی گرا ، یک کلاس دارای تعدادی مشخص  فیلد ، صفت ، رویداد و متد است. یک کلاس انواع داده و عملکرد هایی که اشیا دارند را مشخص میکند. در یک کلاس میتوانید نوع مورد نظر خود را از طریق گروه بندی متغیر ها و دیگر انواع ایجاد کنید.


تعریف کلاس (class)

در زبان برنامه نویسی #C(سی شارپ) یک کلاس میتواند با استفاده از کلمه ی رزرو شده ی class تعریف شود :

public class Customer
{
    //Fields, properties, methods and events go here...
}

در نمونه مثال فوق قبل از کلمه ی class از کلمات رزرو شده ی سطوح دسترسی استفاده شده است. و چون در این مورد از کلمه ی public استفاده شده ، هر کسی میتواند شی ایی از این کلاس را ایجاد کند. به دنبال کلمه ی class نام دلخواه کلاس (Customer) قرار گرفته است. باقی مانده ی تعریف یک کلاس بدنه ی آن است که داده ها و رفتار های کلاس در آن تعریف میشود. فیلد ها ، صفات ، متد ها و رویداد ها در مجموع اعضای کلاس را تشکیل میدهند.


ایجاد شی ایی از یک کلاس

اگرچه یک شی (object) و کلاس در مواقعی به عنوان جایگزینی برای هم دیگر استفاده میشوند ، در واقع آنها دو چیز متفاوت هستند. یک کلاس نوع یک شی را مشخص میکند. گاهی اوقات از شی به عنوان نمونه ایی از یک کلاس یاد میشود. اشیا میتوانند با استفاده از کلمه ی رزرو شده ی  new که به دنبال آن نام کلاس می آید تعریف شوند :

Customer object1 = new Customer();

وقتی نمونه ای از یک کلاس ایجاد میشود ، ارجاع آن به یک شی توسط برنامه نویس انجام میشود. در نمونه مثال قبل object1 با مقداردهی به شی ایی از نوع customer ارجاع پیدا کرده است. 


بررسی یک نمونه مثال از کلاس

در زیر نمونه مثالی آورده شده است که اعضای کلاس در آن مشخص شده اند : 

public class MyClass
{
    public string  myField = string.Empty;

    public MyClass()
    {
    }

    public void MyMethod(int parameter1, string parameter2)
    {
        Console.WriteLine("First Parameter {0}, second parameter {1}", 
                                                    parameter1, parameter2);
    }

    public int MyAutoImplementedProperty { get; set; }

    private int myPropertyVar;
    
    public int MyProperty
    {
        get { return myPropertyVar; }
        set { myPropertyVar = value; }

    } 
}

در نمونه مثال بالا کلاسی به نام  MyClass ایجاد شده است که دارای فیلد ، صفت و متد است.

قسمت های مهمی که در نمونه کد بالا آمده است در شکل زیر مشخص شده اند :


csharp-class
در زیر به طور جداگانه به بررسی هر کدام از این قسمت های مهم  خواهیم پرداخت.


سطح دسترسی (Access Modifiers)

سطوح دسترسی کلمات رزرو شده ای هستند که بر روی اعلان یک کلاس ، متد ، صفت ، فیلد و دیگر اعضای یک کلاس میتوانند اعمال شوند.

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

  • public
  • private
  • protected
  • internal

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


فیلد (Field)

متغیری که در سطح یک کلاس تعریف میشود فیلد نامیده میشود. فیلد ها میتوانند مقادیری از یک نوع مشخص را در خود نگه دارند. عموما فیلد ها در کلاس دارای سطح دسترسی private (فقط قابل دسترسی در محدوده ی همان کلاس ) هستند و در صفت ها (property) استفاده میشوند.


سازنده (Constructor)

یک کلاس میتواند دارای سازنده های پارامتر دار و یا بدون پارامتر باشد. سازنده ها در هنگام تعریف یک شی از یک کلاس فراخوانی میشوند. سازنده ها به وسیله ی یک کلمه ی سطح دسترسی و کلمه ای که همنام با نام کلاس باشند تعریف میشوند :

class MyClass
{
    public MyClass()
    {

    }
}

متد (Method)

یک متد در زبان برنامه نویسی سی شارپ میتواند به شکل الگوی زیر تعریف شود :

{access modifier} {return type} MethodName({parameterType parameterName})
public void MyMethod(int parameter1, string parameter2)
{
    // write your method code here.. 

}

صفت (Property)

یک صفت میتواند با استفاده از کلمات رزرو شده ی get و set مانند نمونه کد زیر ایجاد شود :

private int _myPropertyVar;

public int MyProperty
{
    get { return _myPropertyVar; }
    set { _myPropertyVar = value; }
}

دقت داشته باشید که در یک صفت از یک فیلد استفاده میشود. در نمونه مثال بالا با توجه به تعریف صفت MyProperty ، هر گاه بخواهیم مقدار این صفت را بدست آوریم مقدار فیلد myPropertyVar_ به ما نشان داده میشود و هرگاه این صفت را مقدار دهی کنیم این مقدار در فیلد myPropertyVar_ قرار میگیرد.

عموما صفات در زبان #C دارای سطح دسترسی public (قابل دسترسی  در خارج از محدوده ی کلاس) هستند. به عبارت دیگر فیلد  myPropertyVar_ در خارج از کلاس به طور غیر مستقیم از طریق صفت MyProperty قابل دسترسی است.

نکته : الزامی برای وجود هر دو کلمه ی رزرو شده ی get و set در تعریف یک صفت وجود ندارد. برای مثال اگر صفتی فقط داری قسمت get باشد آن صفت فقط خواندنی است. حتی میتوان منطقی خاص را در قسمت های get و set برای یک صفت به کار برد.

 

در نمونه مثال زیر در هنگام خوانده شدن مقدار صفت، همیشه نیمی از فیلد مورد نظر، نشان داده میشود و در هنگام مقدار دهی نیز مقادیر بزرگتر از 100 در فیلد مربوطه قرار نمیگیرد.

private int _myPropertyVar;

public int MyProperty
{
    get {
        return _myPropertyVar / 2;
    }

    set {

        if (value > 100)
            _myPropertyVar = 100;
        else
            _myPropertyVar = value; ;
    }
}

صفات Auto-implemented

از زمان انتشار #C نسخه 3.0 تعاریف صفات ساده تر شد. این برای زمانی است که نیاز به اعمال منطق خاصی در صفت خود نداریم.

نمونه مثال زیر یک صفت Auto-implemented را نشان میدهد :

public int MyAutoImplementedProperty { get; set; }

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

با صفات Auto-implemented میتوان همانند یک صفت معمولی رفتار کرد و تا زمانی که منطقی نباشد تفاوتی با دیگر صفات ندارد.


فضای نام (Namespace)

یک فضای نام مکانی برای قرار گیری کلاس ها و یا مجموعه ای از فضای نام هاست. فضای نام را میتوان نام منحصر به فردی دانست که کلاس های داخل خود را از دیگر کلاس ها متمایز میکند. در زبان #C ، فضای نام میتواند با استفاده از کلمه ی رزرو شده ی namespace تعریف شود :

namespace CSharpTutorials
{
    class MyClass
    {

    }
}

در نمونه مثال بالا نام کامل کلاس MyClass به این شکل است : CSharpTutorials.MyClass.

یک فضای نام میتواند دیگر فضای نام ها را در خود نگه دارد. فضای نام های داخلی در هنگام دسترسی با کارکتر نقطه (.) مشخص میشوند.

namespace CSharpTutorials.Examples
{
    class MyClassExample
    {

    }
}

در نمونه مثال بالا نام کامل کلاس MyClassExample به این شکل است : CSharpTutorials.Example.MyClassExample

دیدگاه ها

برای ارسال دیدگاه لازم است ابتدا وارد سایت شوید

دیدگاه های ارزشمند شما

behdad sayfee - ۲ سال قبل

سلام من تازه برنامه نویسی رو شروع کردم خیلی سایت مرتب و منظمی دارید خیلی در زمینه مباحث پایه سی شارپ کامل توضیح دادید همیشه موفق باشید در زندگی واقعا لذت میبرم از این همه منظم بودن و از اینکه بدون چشمداشت اینقدر خوب راهنمایی کردید ممنونم

علیرضا کثیرزارع - ۲ سال قبل

سلام امیدوارم خوب باشین، تازه با سایتتون آشنا شدم به نظر سایت خوبی دارید تبریک میگم

یه سوال داشتم، این چنین مطالب فقط برای سی شارپ گذاشتین؟

حمید رضا ملکی - ۲ سال قبل

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

علی پاکدل - ۲ سال قبل
سلام مهندس جان، آموزشتون بسیار بسیار عالیه. فقط اگر مثال‌های واقعی هم همراه با تمپلت بیارین خیلی خیلی عالی تر میشه.
ببخشید ها ولی شما اینو از سایت خارجی کپی وترجمه نکردید
حمید رضا ملکی - ۳ سال قبل

سلام.. تمام مطالب ما در سایت ترجمه هستند...مشکلش چیه؟

masoud imani - ۳ سال قبل
سلام این مطالب رو به صورت فایل تصویری آموزش ندادین؟
حمید رضا ملکی - ۳ سال قبل

سلام.. اگه منظورتون فایل ویدئویی هست.. بله دوره آموزش مقدماتی تا پیشرفته سی شارپ را دنبال کنید.

کاربر مهمان - ۵ سال قبل
چقدر خوبی شما اصن لذت میبره آدم از مطالعه مطالبتون
کاربر مهمان - ۵ سال قبل
خیلی خوب بود.ممنون از شما!
کاربر مهمان - ۵ سال قبل
ممنون مطالب مفیدی بود لطفا درباره ارایه ها هم مطالبی قرار بدهید
کاربر مهمان - ۵ سال قبل
خسته نباشید زحمت زیادی روی این آموزش کشیده اید، بنده نیز اعتقاد دارم که آموزش و اطلاعات خوب تقسیم بندی و بیان شده اند.
حمید رضا ملکی - ۵ سال قبل

ممنون. نظر شما مایه دلگرمی برای ماست.

کاربر مهمان - ۵ سال قبل
بسیار عالی بیان شده خسته نباشید.
حمید رضا ملکی - ۵ سال قبل

ممنون از لطف شما

آموزش سی شارپ

هدف لرن سورس

لرن سورس با هدف ایجاد یک مرجع کامل و جامع در زمینه آموزش دوره محور زبان های برنامه نویسی و وب پا به عرصه وب گذاشته است.

ما در لرن سورس همیشه سعی خواهیم کرد تا نیاز های آموزشی شما کاربران عزیز را در قالب آموزش های مختلف پاسخ دهیم.

بخش های اصلی

با استفاده از لینک های زیر میتوانید به بخش های اصلی سایت دسترسی داشته باشید:

راه های ارتباطی

شما کاربران عزیز میتوانید با هر کدام از راه های ارتباطی زیر با تیم آموزشی لرن سورس در ارتباط باشید:

کلیه حقوق مادی و معنوی وبسایت متعلق به لرن سورس می باشد.