انواع کلاس ها در سی شارپ

یکشنبه 20 تیر 1395

در این مقاله ما به معرفی انواع کلاس ها در #C و ویژگی ها و کاربردهای آن ها می پردازیم و همچنین به سراغ کلمات کلیدی ، اعضا و نحوه ساخت این کلاس ها می رویم.

انواع کلاس ها در سی شارپ

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

Abstract class

Partial class

Static class

Sealed class

حال می خواهیم با کلاس Abstract شروع کنیم.

تعریف:

کلاس Abstract یک روش برای تعریف کردن  کلاسی است که برای سایر کلاس ها به عنوان یک کلاس پایه عمل کند تا امکان ایجاد متدهای Abstract را برای ما فراهم کند و یا پیاده سازی کامل متدها(به صورت یک رفتار) را امکان پذیر می کند و یا هر دو.

حال می خواهیم ببینیم که کلاس Abstractچگونه تعریف می شود.

خروجی:

در اینجا نکاتی برای یادآوری درمورد کلاس Abstract آمده است.

شما باید همه ی متدها را در کلاس Abstract پیاده سازی کنید ،اگر آن ها با کلمه کلیدی abstract علامت گذاری شده باشند.

شما باید از کلمه کلیدی override به منظور پیاده سازی متدهایی که با Abstract یا Virtual علامت گذاری شده اند ، استفاده کنید.

شما نمی توانید ازکلمه کلیدی override و virtual در یک متد استفاده کنید.

متد باید با abstract ،  virtual ، یا override علامت گذاری شود تا امکان انواع پیاده سازی بر روی آن فراهم شود.

عضوهای  Abstract نباید private یا protected باشند.

کلاس Abstract می تواند عضوهای private  و protected  را داشته باشد اما آن ها به هیچ عنوان در دسترس نیستند.

همه ی موارد بالا در مورد کلاس Abstract می باشد.

کلاس Partial :

گاهی اوقات ، زمانی که روی یک  پروژه بزرگ کار می کنیم ، ما با تعدادی سناریو مواجه می شویم که Class، struct و interface باید از هم جدا شوند تا به توسعه دهندگان دیگر، اجازه ی انجام کاراز نوع یکسان به  صورت موازی را می دهد.

Class ،Struct و interface ممکن است در فایل های مختلف وجود داشته باشند.

برای اینکه این کار امکان پذیر باشد ،ما کلاس Partial داریم.

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

خروجی:

می خواهیم حقایقی در مورد کلاس Partial ، Interface یا Struct و متدها بیان کنیم.

کلمه کلیدی Partial ، برای تقسیم کردن کلاس به دو فایل جداگانه یا پیاده سازی ، استفاده می شود.

تمامی قسمت های کلاس، باید کلمه کلیدی Partialرا داشته باشد.

همه ی قسمت ها باید در زمان کامپایل در دسترس باشند.

دسترسی به قسمت ها باید یکسان باشد به عنوان مثال استفاده از access modifier  در قسمت های Partial باید یکسان باشد.

اگر هر قسمت به عنوان abstract یا sealed شناخته شود،در ادامه این قسمت ها به ترتیب به عنوان abstract یا sealed درنظر گرفته می شود.

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

متدهای Partial می توانند فقط در Partial class یا Struct تعریف شوند.

استفاده از access modifier ها مجاز نیست.

متدهای Partial  به طور پیش فرض Private می باشند.

شما نمی توانید به متد Partial در متد main دسترسی داشته باشید.شما باید از آن در کلاس مشابه استفاده کنید.

نوع نهایی ترکیبی از تمام قطعات در زمان کامپایل است.

کلاس Partial شامل محدودیت های زیر می باشد:

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

Partial modifier فقط می تواند مستقیما قبل از کلمات کلیدی Class  ، struct یا Interface بیاید.

همه ی Partial-type  ها باید در اسمبلی و ماژول یکسان تعریف شوند.

نام کلاس و پارامترهای از نوع generic باید در تمامی انواع تعاریف Partial مطابقت داشته باشند.انواع Generic  ها می توانند Partial باشند .

همه ی این موارد برای کلاس Partial می باشد.

کلاس Static

کلاس Static ، همان کلاس غیراستاتیک می باشد، اما از آن نمونه ای(Instance) نمی توان ساخت. ما نمی توانیم یک object از کلاس static  ، با استفاده از کلمه ی کلیدی new  ، ایجاد کنیم.در سی شارپ از واژه کلیدی static برای معرفی آن ها کمک گرفته  می شود.برای مثال:

class MyClass
{
    public static int a;
    public static void SampleStatic();
}

در این مثال برای فراخوانی متد SampleStatic نیازی به ایجاد یک نمونه ی جدید از کلاس MyClass نمی‌باشد و تنها کافی است بنویسیم:

MyClass. SampleStatic (); // and not -> new MyClass().SampleStatic ();

نکته‌ی مهم در اینجا وجود دارد این است که متدهای استاتیک تنها قادر به استفاده از متغیرهای استاتیک تعریف شده در سطح کلاس هستند.

به مثال زیر توجه کنید:


class MyClass
{
 // non-static instance member variable
 private int a;
 //static member variable
 private static int b;
 //static method
 public static void SampleStatic ()
 {
  //this will result in compilation error as “a” has no memory
  a = a + 1;
  //this works fine since “b” is static
  b = b + 1;
 }
}

در مثال بالا اگر متد SampleStatic را فراخوانی کنیم، فقط متغیر b  که به صورت استاتیک تعریف شده است ، در حافظه حضور دارد ، و چون با روش فراخوانی MyClass. SampleStatic هنوز وهله ای از کلاس MyClass ایجاد نشده ،درنتیجه برای متغیر a حافظه ای اختصاص داده نشده است و نامشخص است.

درنتیجه کامپایلر ، این کد را کامپایل نکرده و خطا می دهد.

کلاس Sealed :

نوعی کلاس می باشد که نمی توان از آن ارث بری کرد .کلاس Sealed شامل محدودیت های زیر می باشد:

این کلاس با کلمه کلیدی Sealed ایجاد می شود.

نمی توان بر روی کلاس های Sealed ، access modifier اعمال کرد.

برای دسترسی به اعضای این کلاس ، باید یک شی جدید از جنس کلاس Sealed ، ایجاد کنیم.

به مثال زیر توجه کنید:

public sealed class  SampleSealed  
{  
    public string AccountIno()  
    {  
        return "Vithal Wadje";  
    }  
} 

در مثال بالا ، بدلیل آن که کلاس ما با کلمه ی کلیدی Sealed تعریف شده است در نتیجه نمی توانیم از کلاس و اعضای آن ارث بری کنیم.این نوع کلاس ها زمانی کاربرد دارند که ما می خواهیم وراثت از کلاسی را محدود کنیم که این کار امینیت  بیشتری را برای کدها فراهم می کند.

آموزش سی شارپ

برنامه نویسان

نویسنده 3355 مقاله در برنامه نویسان
  • C#.net
  • 17k بازدید
  • 13 تشکر

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

در صورتی که در رابطه با این مقاله سوالی دارید، در تاپیک های انجمن مطرح کنید