
یادگیری سی شارپ از مفاهیم پایه تا پروژه محور: شیگرایی، کار با SQL و LINQ، ORMها (Entity Framework)، ساخت پروژه مدیریت رستوران با گزارشات حرفهای و امکانات کامل!
مشاهده بیشتر
یادگیری MVC Core از مبانی تا پیشرفته: شیگرایی، Routing، Entity Framework، امنیت، تست یونیت، Razor، Ajax، و پروژههای کاربردی! یک دوره کامل برای تسلط بر توسعه وب با ASP.NET Core. به صورت حضوری و آنلاین!
مشاهده بیشترمشخصات مقاله
کلاس و شی گرایی در سی شارپ (C# class, OOP)
در تقریبا تمامی زبان های شی گرا، باید ابتدا الگویی برای ساخت اشیا ایجاد کرد تا اشیای مورد استفاده در برنامه بر پایه این الگوها ساخته شوند."کلاس ها" همان الگوهای ساخت اشیا هستند که در زبان سی شارپ به همین منظور کاربرد دارند. در سی شارپ می توان با به کاربردن چند متغیر یک شئ پیچیده ساخت. هر زبان برنامه نویسی خود امکان استفاده از چندین نوع متغیر و همچنین توابع دلخواه نوشته شده توسط برنامه نویس وجود دارد. کلاس در واقع پایه ای برای ایجاد متغیری پیچیده که شامل دیگر انواع متغیرهای پایه و توابع یا حتی از نوع دیگر کلاس ها می باشد. حال برای به وجود آوردن یک کلاس, ابتدا کلیدواژه ی class را تایپ کرده و سپس به دنبال آن اسم و بدنه ی اصلی را داخل بلوک {} قرار می دهیم.
برای تعریف متغیر، می توان از کلیدواژه ی var یا نوع داده ی ساده و شناخته شده بهره گرفت. برای مثال، می توان برای تعریف متغیری که نشانگر تعداد اتاق خواب های یک خانه است، از integer استفاده کرد.
1 2 3 4 5 6 7 8 | class Program { static void Main() { int bedrooms = 3; } } <button></button> |

در C# می توان با به کاربردن چند متغیر، شی ای کامل پیچیده ساخت. در زبان های برنامه نویسی کلاس (که خود متشکل از یک گروه متغیر است)، در واقع پایه ای برای ایجاد متغیری پیچیده تر می باشد. حال برای به وجود آوردن یک کلاس، ابتدا کلیدواژه ی class را تایپ کرده،سپس به دنبال آن اسم و بدنه ی اصلی را داخل {} قرار داد.
نحوه ی وارد کردن کلاس
- Microsoft Visual Studio را اجرا کنید.
- به main menu مراجعه کرده و برای ایجاد app جدید گزینه های File -> New Project را انتخاب کنید.
- در فهرست میانی روی گزینه ی Empty Project کلیک کنید.
- اسم مورد نظر را به DepartmentStore1 تغییر دهید.
- حال OK را کلیک کنید.
نام گذاری کلاس
درست مثل متغیر، یک کلاس باید دارای اسم باشد. اسم گذاری برای کلاس بسیار شبیه به فرایند اسم گذاری برای متغیر است (از همان قوانین پیروی می کند). البته، شما می توانید قوانین خو را به کار ببرید. در دروس ما چنانچه اسم کلاس از تنها یک کلمه تشکیل شده، فقط حرف اول با حروف بزرگ نوشته می شود. نمونه های آن : Identification،Vehicle ، Student می باشد. اگر اسم کلاس موردنظر از چند کلمه ساخته شده باشد، تمام حروف اول کلمات با حرف بزرگ نوشته می شوند : DrivingRecord، GeometricShape، SocialSecurityInformation
مدیریت کلاس ها
Microsoft Visual Studio ابزار و امکان های بصری زیادی برای مدیریت کلاس در اختیار برنامه نویس می گذارد. همچنین فرایند نام گذاری یا تغییر اسم کلاس ها را با امکاناتی که دارد برای کاربر آسان ساخته است.
پنجره ی Class View
بهترین روش برای مدیریت کلاس، استفاده از پنجره ی Class View است. برای دسترسی به این پنجره چنانچه پنجره از قبل باز نیست، ابتدا main menu را باز کرده، سپس View -> Class View را کلیک کنید. اگر پنجره ی مذکور از قبل باز بود، تنها کافی است روی tab آن کلیک کنید. پنجره ی Class View از شش بخش مجزا تشکیل شده. همانطور که در تصویر زیر مشاهده می کنید کاربرد و نوار عنوان آن مشابه solution explorer می باشد.

دومین بخش تشکیل دهنده ی نوار عنوان، نوار ابزار (toolbar) آن می باشد

همان طور که از اسم آن پیدا است گزینه ی New Folder به شما اجازه می دهد فولدری جدید ایجاد کرده و به پروژه اضافه کنید. دکمه های Back و Forward به شما اجازه می دهند در کلاس ها پیمایش کنید. در زیر toolbar، نوار دیگری وجود دارد که از یک combo box و دکمه تشکیل شده که به کمک آن ها می توانید جستجو کنید. بدنه ی اصلی پنجره ی Class View نیز از دو بخش اصلی تشکیل شده. اولین گره ی قسمت بالایی پنجره، اسم پروژه را نشان می دهد. حال زیر گره ی پروژه، اسم کلاس ها نمایش داده شده است. قسمت پایینی پنجره نیز به اعضای کلاس ها اختصاص داده شده است.

ایجاد کلاس
راه های مختلفی برای ساختن کلاس وجود دارد. در صورت کار با برنامه های ویرایش متن مثل Notepad، فایل را ایجاد کرده، کلیدواژه ی class را تایپ کنید، به دنبال آن اسم کلاس مورد نظر و علامت } را درج کنید.
مثال:
1 2 3 4 | class House { } <button></button> |
حال، فایل خود را با پسوند .cs ذخیره کنید. البته، نیازی نیست که اسم فایل با اسم کلاس یکی باشد. به خاطر داشته باشید که باید فایل مزبور را در همان فولدری که فایل های دیگر پروژه در آن نگه داری می شوند، ذخیره کنید. کلاس در یک code file ایجاد می شود. به همین خاطر هم می توانید آن را در اولین فایل پروژه ی خود ذخیره کنید.
1 2 3 4 5 6 7 8 9 10 11 12 | class House { } class Exercise { static void Main() { int bedrooms = 3; } } <button></button> |

Microsoft Visual C# 2010 Express یا Microsoft Visual Studio فرایند ایجاد کلاس را برای شما بسیار آسان می سازد. در درس 1، دیدیم که چگونه می توان code file ایجاد کرد. پس از ساختن code file نام برده، کافی است کد مورد نیاز را برای کلاس وارد کنید. پس از انتخاب گزینه ی Add New Item (در solution explorer یا main menu)، می توان نوع فایل دلخواه را انتخاب کرد از جمله فایل کلاس. به منظور ایجاد کلاسی جدید در main menu روی گزینه ی Project -> Add Class... کلیک کنید، ( یا در لیست میانی پنجره ی محاوره Add New Item، Project -> Add New Item، روی گزینه ی class کلیک کنید). در Solution Explorer، روی اسم پروژه راست کلیک کرده، نشان گر موس را روی Add قرار دهید، سپس class را انتخاب کنید. در پنجره ی Class View، روی اسم پروژه راست کلیک کنید، نشان گر موس را روی Add قرار داده، و class را انتخاب کنید. در نتیجه ی تمام عملیات بالا، پنجره ی محاوره ی Add New Item نمایش داده می شود (که در آن گزینه ی class اتنخاب شده). در صورتی که Add New Item را از main menu یا Solution Explorer انتخاب کرده اید، کافی است روی خود class کلیک کنید. می توانید اسم پیش فرض را در کادر متن Name عوض کنید ( یا در صورت تمایل همان اسم را بپذیرید). اکنون، فایل جدیدی با اسم انتخابی شما و پسوند .cs به پروژه ی شما اضافه می شود. همچنین می توان برای ایجاد کلاس از skeleton code استفاده کرد. در آن قسمت Code Editor که باید کلاس جدید را اضافه کنید، راست کلیک کرده، سپس روی Insert Snippet کلیک کنید. حال، Visual C# را دو بار کلیک کنید. در لیستی که ظاهر می شود، روی class دو بار کلیک کنید.

چنانچه کد را از قبل نوشته اید، و اکنون می خواهید آن کد را در کلاس خود جای دهید، کافی است آن کد را انتخاب کنید. ابتدا روی آن راست کلیک کرده، سپس گزینه ی Surround With را انتخاب کنید.


کلاسی با اسم پیش فرض MyClass به وجود می آید.
مبانی کلاس ها (قسمت دوم) - وارد کردن کلاس
- به main menu مراجعه کرده، روی Project -> Add New Item... کلیک کنید.
- در لیست میانی Add New Item، روی Code File کلیک کنید.
- اسم را به StoreItem تغییر دهید.

- روی Add کلیک کنید.
- در فایل زیر، این عبارت را تایپ کنید
1 2 3 4 | class StoreItem { } <button></button> |
- در main menu، گزینه های View -> Solution Explorer
- حال، برای به وجود آوردن code file ای دیگر، (در (Solution Explorer روی DepartmentStore1 راست کلیک کرده، سپس نشانگر موس را روی Add قرار داده و گزینه ی click New Item... را انتخاب کنید.
- در لیست میانی پنجره ی محاوره Add New Item، روی Code File کلیک کنید.
- اسم مورد نظر را به DepartmentStore تغییر دهید.
- روی Add کلیک کنید.
- داخل فایل خالی عبارات زیر را تایپ کنید.
1 2 3 4 5 6 7 | class DepartmentStore { static void Main() { } } <button></button> |
نحوه ی دستیابی به کلاس
همان طور که پیشتر ذکر شد، شما می توانید هر تعداد کلاس که مایلید برای پروژه ی خود ایجاد کنید. مطابق میل می توانید هر کلاس را در فایل مختص به خود آن کلاس نگه دارید یا می توانید تمام کلاس ها را در یک فایل واحد ذخیره کنید. اکنون، برای دسترسی به کلاس ها روش های ذیل وجود دارد
- در قسمتی که به تب های Code Editor اختصاص دارد، روی تَبی که میزبان فایل کلاس دلخواه است کلیک کنید. سپس، به combo box سمت چپ Code Editor مراجعه کرده و کلاس را انتخاب کنید
- در Solution Explorer، زیر اسم پروژه، روی اسم فایلی که دربردارنده ی کلاس است دوبار کلیک کنید. چنانچه فایل حاوی چند کلاس است،در combo box سمت چپ Code Editor، کلاس دلخواه را انتخاب کنید.
- در پنجره ی Class View، زیر اسم پروژه، اسم کلاس را دوبار کلیک کنید.
- در combo box پنجره ی Class View، روی کلاس مورد نظر راست کلیک کرده، سپس گزینه ی Go To Definition را انتخاب کنید.
تغییر اسم کلاس
اگر اسم کلاسی باب میلتان نیست، می توانید آن را عوض کنید. راه اولیه ی آن پیدا کردن اسم کلاس در Code Editor (یا در برنامه ی ویرایش متن مثل Notepad) و ویرایش آن است. در صورت استفاده از این روش، باید تمامی قسمت هایی که اسم در آن به کار رفته نیز پیدا شود. همان طور که انتظار می رود این کار بسیار دشوار بوده و احتمال خطا نیز در آن بالا است. اما برنامه های Microsoft Visual C# 2010 Express و یا Microsoft Visual Studio راه حل بهتری برای انجام این فرایند در اختیار شما قرار می دهند. برای تغییر دادن اسم در Microsoft Visual Studio یا Microsoft Visual C# دستورات زیر را انجام دهید.
- در Code Editor، روی اسم کلاس راست کلیک کرده، حال نشانگر موس را روی Refactor قرار دهید، سپس گزینه ی Rename... را انتخاب کنید.
- در پنجره ی Class View، روی اسم کلاس راست کلیک کرده و Rename... را انتخاب کنید.
- ر Class View، به منظور انتخاب کلاس موردنظر باید روی اسم آن کلیک کنید. اکنون، به main menu مراجعه کرده و گزینه های Refactor -> Rename... را کلیک کنید.
کلیه ی اقدامات بالا پنجره ی محاوره ی Rename را نمایش می دهند. حال، می توانید اسم کلاس را در کادر متن New Name ویرایش کنید. برای تنظیم اینکه آیا مایلید Code Editor، اسم به کار رفته در comment یا string را تغییر دهد یا نه، مجبورید از checkbox ها استفاده کنید. پس از کلیک روی دکمه ی ok، پنجره ی Preview Changes – Rename به نمایش گذاشته می شود. پنجره ی بالا بخش های مختلفی که اسم مورد نظر در آن به کار رفته را برای شما فهرست می کند. اکنون می توانید به منظور اعمال تغییرات به وجود آمده روی Apply کلیک کنید.
ابزار جانبی زبان سی شارپ - کد نا امن
کی از دلایلی که زبان C# طراحی شد، اجتناب از کاستی ها و مشکلات زبان های C/C++ بود. کاربرد اشاره گر (pointer) از جمله ی این کاستی ها بود. C/C++ از اشاره گر برای ارجاع دادن به محل نگه داری مقداری در حافظه استفاده می کنند. بر خلاف این دو زبان، C# تا حد ممکن از به کاربردن اشاره گر اجتناب می کند و مدیریت حافظه را خود به دست می گیرد ( به جای سپردن این وظیفه به برنامه نویس). البته در صورت لزوم، برنامه نویس می تواند از اشاره گر (در C#) استفاده کند. به این خاطر که compiler زبان C# عهده دار مدیریت حافظه و مقدارهای ذخیره شده در آن است (منظور مقدارهای برنامه ای است که از حافظه استفاده می کنند)، استفاده از اشاره گر توصیه نمی شود. با این وجود، چنانچه مایل هستید از اشاره گر در برنامه ی کاربردی خود استفاده کنید، باید پیش از اسم تمامی متدهایی که از کدناامن استفاده می کنند کلیدواژه ی unsafe را تایپ کنید. به مثال زیر توجه کنید.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | class Exercise { unsafe static void Main() { int Length = 224; int *Len = &Length; System.Console.Write( "Length " ); System.Console.WriteLine(Length); System.Console.Write( "Length " ); System.Console.WriteLine(*Len); System.Console.WriteLine(); Length = 804; System.Console.Write( "Length " ); System.Console.WriteLine(Length); System.Console.Write( "Length " ); System.Console.WriteLine(*Len); } } <button></button> |
پیش از ترجمه (compile) برنامه ی کاربردی مورد نظر، باید هنگام استفاده از ابزار مترجم سی شارپ حتماً اشاره شود که unsafe code ( کد ناامن) در این برنامه به کاربرده شده. برای این منظور، از تعریف کننده (modifier)، /unsafe استفاده می شود.
مثال:
csc /unsafe Exercise.cs
برای استفاده از این امکان در Microsoft Visual Studio، main menu را باز کرده، روی Project -> Project Properties... کلیک کنید. حال، در قسمت Build، کادر تیک Allow Unsafe Code را فعال کنید.

جدا سازی نواحی کد به کمک Region Delimiters
Microsoft Visual Studio امکانات مختلفی برای نوشتن و مدیریت بهتر کد فراهم می کند. این ویژگی ها و امکانات عبارت اند از : کلمات رنگی، توگذاری خودکار (intuitive indentation)، IntelliSense، تعیین حد و مرز کدها و غیره...

همان طور که در تصویر مشاهده می کنید، دکمه هایی در سمت چپ برخی از خط های برنامه قرار دارند. دکمه های نام برده به شما اجازه می دهند آن بخشی از کد را که مورد نیاز نیست جمع کنید (ببندید). برای این منظور، باید روی دکمه ی (-) کلیک کنید. علامت دکمه ی مذکور به (+) تغییر می کند.

دکمه ی + به شما اجازه می دهد بخش پنهان کد را باز کنید. این ویژگی یکی از امکانات Code Editor برنامه ی Microsoft Visual Studio است (که البته در خیلی از محیط های برنامه نویسی دیگر نیز کاربرد دارد). برای به وجود آوردن این بخش ها، Code Editor از قوانین خاصی پیروی می کند. لازم به ذکر است که شما می توانید در صورت تمایل، به جای استفاده از بخش های کد بالا، بخش های کد (code section) دلخواه خود را ایجاد کنید. برای این منظور در صورت کار با برنامه های ویرایش متن (مثل wordpad) یا Code Editor برنامه ی Microsoft Visual C# 2010 Express، فایل موردنظر را با عبارت زیر شروع کرده.
1 2 | #region Whatever <button></button> |
و با این عبارت به پایان برسانید.
1 2 | #endregion Whatever <button></button> |
اگر با برنامه های Microsoft Visual C# 2010 Express یا Microsoft Visual Studio کار می کنید. چنانچه مایلید section ای ایجاد کنید که حاوی بخشی تهی باشد، روی آن خطی که می خواهید section از آن جا شروع شود راست کلیک کرده، Insert Snippet... را انتخاب کنید، سپس روی Visual C# دوبار کلیک کنید.
مبانی کلاس ها (قسمت سوم)
چنانچه مایلید بخشی ایجاد کنید که حاوی کد است، کافی است کد موردنظر را در Code Editor انتخاب کنید. حال، باید روی بخش انتخابی راست کلیک کرده و گزینه ی Insert Snippet را انتخاب کنید.

روی صفحه ی Visual C# دوبار کلیک کنید. در لیستی که ظاهر می شود، روی گزینه ی #region کلیک کنید. ناحیه ای با اسم پیش فرض به صورت زیر ایجاد می شود.

هر زمان و جایی که می خواهید ناحیه ی جدیدی ایجاد کنید، به عبارت #region نیاز دارید. می توانید در سمت راست عبارت بالا هر چه مایل هستید تایپ کنید. بخش به وجود آورده را با عبارت #endregion (و هرچیز دیگری که دوست دارید به دنبال آن تایپ کنید) به پایان برسانید. توجه خود را به مثال زیر جلب کنید.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | class Circle { } #region This section is reserved for quadrilateral shapes class Rectangle { } class Square { } #endregion This is the end of the quadrilateral section class Line { } <button></button> |
نیاز به تایپ کردن هیچ چیز در سمت راست #endregion نیست. پس از ایجاد ناحیه ی مورد نظر، Code Editor دکمه ی - را در سمت چپ #region نمایش می دهد و به دنبال آن خطی ظاهر می شود که به سمت چپ عبارت #endregion ختم می شود.

حال، این دکمه به شما اجازه می دهد بخش مورد نظر را به دلخواه بازکرده یا ببندید.

همان طور که بالا ذکر شد، نیازی نیست در سمت راست #endregion چیزی بنویسید و می توانید آن را خالی بگذارید. در مثال بالا، مستطیلی مشاهده می کنید که با خط های خاکستری رشته را احاطه کرده و به دنبال #region می آید. این مستطیل رشته ای که پس از #endregion می آید را تحت پوشش قرار نمی دهد. به عبارت دیگر، چنانچه هیچ چیز در سمت راست #endregion تایپ نشود، بخش سمت راست خط #region نیز نمایش داده نخواهد شد.
مبانی نحوه ی استفاده از کلاس - ایجاد (یک) شی
برای به کاربردن کلاس در برنامه، ابتدا لازم است برای آن یک متغیر تعریف کنید. از فرایند تعریف متغیر برای کلاس، به عنوان ایجاد شی (creating an object) یا نمونه ای از کلاس (instance of class) نیز یاد می شود. به منظور تعریف متغیر (یک) کلاس، می توان از کلید واژه ی var استفاده کرد. سرانجام، می توان اسم متغیر را به دنبال اسم کلاس مورد نظر تایپ کرد. برای مثال، اگر بخواهیم متغیری برای کلاس خانه ی اول درس معرفی کنیم، به صورت زیر عمل می کنیم :
1 2 3 4 5 6 7 8 9 10 11 12 | class House { } class Program { static void Main() { var property... } } <button></button> |
یا
1 2 3 4 5 6 7 8 9 10 11 | class House { } class Program { static void Main() { House property; } } <button></button> |
متغیرهای از نوع مقدار (value types) و از نوع ارجاع (reference type)
در درس های 3 و 4 با نحوه ی تعریف متغیر های نوع عادی آشنا شدیم. همچنین گفتیم که پس از مقداردهی اولیه ی این متغیرها، compiler مقدارهای آن ها را در قسمت هایی از حافظه که از قبل به آن ها اختصاص داده ذخیره می کند. نوع داده (data type) هایی که برای چنین متغیرهایی به کار می روند، نوع مقدار (value type) خوانده می شوند. برای ذخیره سازی مقادیر این متغیرها، compiler بخشی در حافظه به وجود می آورد به نام پشته (stack). بخش باقی مانده ی حافظه heap نام دارد که به ذخیره سازی متغیر کلاس ها اختصاص می یابد.

پس از این که متغیری را با استفاده از کلاس تعریف کردید، باید از compiler درخواست کنید بخشی از حافظه ی heap را به آن تخصیص دهد. برای این منظور، از عملگری به نام new استفاده می شود.
مثال:
1 2 3 4 5 6 7 8 9 10 11 | class House { } class Program { static void Main() { var property = new House(); } } <button></button> |
می توان به جای استفاده از کلید واژه ی var، متغیر را با اسم کلاس معرفی کرد. همان طور که برای نوع مقدار (value type) ذکر شد، در صورت استفاده از کلیدواژه ی var، ملزم هستید بلافاصله حافظه به آن اختصاص دهید. اما، در صورت استفاده از اسم کلاس (برای تعریف متغیر) ، می توان متغیر مزبور را در یک خط تعریف کرد، سپس عملگر New را در خط دیگری برای تخصیص حافظه به کاربرد.
مثال:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | class House { } class Program { static void Main() { House property; // You can do something here property = new House(); } } <button></button> |
در برنامه های Visual Basic و C# چنانچه کلاسی را در هریک از فایل های متعلق به یک پروژه واحد ایجاد کنید، کلاس نام برده در دسترس تمامی فایل های (دیگر) پروژه قرار می گیرد.
تعریف متغیر نوع کلاس
در بدنه ی Main، عبارات زیر را تایپ کنید.
1 2 3 4 5 6 7 8 | class DepartmentStore { static void Main() { StoreItem si = new StoreItem(); } } <button></button> |
ایجاد شی تهی (Null Object)
برای استفاده از امکانات (behavior) و مقدارهایی که کلاس فراهم می کند، ملزم به تعریف متغیر هستیم. همچنین دیدیم که پیش از به کاربری کلاس، باید مقدارهای لازم برای فیلد های کلاس را فراهم کنید. این کار به compiler اجازه می دهد تا حافظه ی تخصیص یافته به متغیر را با مقادیر دلخواه پر کند. ممکن است شما کاملاً آماده نباشید مقادیر لازم را هنگام تعریف متغیر فراهم کنید. متغیری که برای کلاسی تعریف شده ولی هنوز مقدار لازم برای فیلد را دریافت نکرده را، شی تهی null object)) می خوانند. برای این منظور (ایجاد شی تهی)، ابتدا اسم کلاس و به دنبال آن اسم متغیر را تایپ کرده، سپس کلید واژه ی null را به آن اختصاص دهید. متغیری که برای کلاسی تعریف شده ولی هنوز مقدار لازم برای فیلد را دریافت نکرده را، شی تهی null object)) می خوانند. برای این منظور (ایجاد شی تهی)، ابتدا اسم کلاس و به دنبال آن اسم متغیر را تایپ کرده، سپس کلید واژه ی null را به آن اختصاص دهید. پیش تر بحث شد که می توان برای تعریف متغیری با مقدار تهی (null) علامت سوال (؟) به آن اضافه کرد. در صورت استفاده از کلاس، از اضافه کردن ؟ به اسم کلاس خودداری کنید.
1 2 3 4 5 6 7 8 9 10 11 12 | class House { } class Program { static void Main() { House property = null ; } } <button></button> |
چنانچه متغیر کلاسی از پیش تعریف و مقدار دهی اولیه شده بود، ولی بنا به هر دلیلی مقدارهای آن پاک شد، چنین متغیری نیز شی تهی (null object) خوانده می شود.
به اشتراک گذاری کلاس
برخلاف زبان های C و C++ که پیشرو و والدین برنامه ی C# حساب می شود، زبان C# طوری تعبیه شده که با دیگر زبان های برنامه نویسی از جمله C++/CLI، Visual Basicو F# به صورت مکمل کار کند. به عبارت دیگر، می توان با کد هریک از زبان های بالا، کدهای یک برنامه کاربردی که توسط C# نوشته شده باشد را خواند. برای تحقق بخشیدن به این امر، کلاس C# باید به عنوان شی عمومی (public object) تعریف شود. اگر می خواهید کدهای نوشته شده توسط زبان های بالا به کلاس شما دسترسی پیدا کنند، باید هنگام ایجاد کلاس، پیش از کلید واژه ی class، کلیدواژه ی public را تایپ کنید.
مثال:
1 2 3 4 5 6 7 8 9 10 11 | public class Exercise { static void Main() { var number = 244; var thing = "Vehicle" ; System.Console.WriteLine(number); System.Console.WriteLine(thing); } } <button></button> |
چگونگی اعمال به اشتراک گذاری یک کلاس
- main menu را باز کرده، روی گزینه های View -> Class View کلیک کنید.
- در پنجره ی Class View، روی DepartmentStore1 دوبار کلیک کنید تا بزرگ شود.
- در قسمت بالایی بدنه ی اصلی پنجره ی Class View، روی StoreItem راست کلیک کرده، سپس گزینه ی Go To Definition را انتخاب کنید.
- کلید Home را زده، public را تایپ کنید و پس از آن دکمه ی space را فشار دهید. فایل پیش رو به صورت زیر تغییر داده می شود.
1 2 3 4 | public class StoreItem { } <button></button> |
زباله روبی (garbage collection)
زمانی که متغیری را به کمک کلیدواژه ی new تعریف می کنید، در واقع دارید بخشی از حافظه ی heap را به آن اختصاص می دهید (برای آن رزرو می کنید). زمانی که به آن متغیر دیگر نیازی نیست، مثل زمانی که برنامه بسته می شود، متغیر گفته شده پاک شده و حافظه ی اختصاص یافته به آن باید در اختیار متغیرها یا برنامه های دیگر قرار گیرد. به این فرایند زباله روبی یا garbage collection می گویند. در زبان های برنامه نویسی C/C++، این مسئله برای برنامه نویس یک معضل بزرگ محسوب می شد، زیرا که برنامه نویس باید خود به صورت دستی چنین متغیرهایی (اشاره گر/pointer) را پاک می کرد و حافظه را آزاد می ساخت. چهارچوب کاری .NET Framework مسئله ی زوباله روبی را حل کرده و حافظه را خودکار از متغیرهای بلااستفاده رها می سازد.
فیلدهای کلاس
به بخشی که محصور در علامت {} است، بدنه ی یک کلاس گفته می شود. در بدنه ی کلاس اجزای تشکیل دهنده ی کلاس قرار می گیرند. این اجزا در واقع تحت عنوان متغیرهای عضو یا member variable های یک کلاس تعریف می شوند. در زبان C# متغیری که در بدنه ی کلاس ایجاد می شود، فیلد اطلاق می گردد. هر فیلد مثل متغیرهای معمول دیگر، با یک اسم و نوع داده تعریف می شود. برای مثال، زیر اجزای تشکیل دهنده ی یک خانه به عنوان اعضای تشکیل دهنده یک کلاس (که هریک خود به مثابه ی یک متغیر تعریف شده) تعریف شده اند.
1 2 3 4 5 6 7 8 9 | public class House { string propertyNumber; char propertyType; byte stories; uint bedrooms; decimal value; } <button></button> |
برای این که نشان دهید متغیری (فیلدی از نوع اولیه) قادر است مقداری تهی (null value) داشته باشد، کافی است علامت سوال به آن اضافه کنید.
1 2 3 4 5 6 7 8 9 | public class House { string propertyNumber; char ? propertyType; byte ? stories; uint ? bedrooms; decimal ? value; } <button></button> |
پس از افزودن ؟، ملزم به رعایت قوانین خاصی می شوید. متغیرهای تعریف شده در بدنه ی یک کلاس متغیرهای عضو (member variable) خوانده می شوند و هر متغیر عضو سرانجام یک فلید تلقی می گردد. فیلدها ی یک کلاس ممکن از هر نوع داده که تا کنون معرفی شده تشکیل شده باشد.
از این بخش به بعد، برای اشاره به فیلد متعلق به یک کلاس می نویسیم.
className.FieldName
به عبارتی ساده تر، FieldName فیلدی است که عضو کلاس ClassName می باشد.
سطح دسترسی اعضای کلاس(access modifiers of a class)
لازم است تا اعضای تعریف شده داخل هر کلاس دارای یک سطح دسترسی مشخص باشند. منظور از سطح دسترسی در واقع همان حوزه دسترسی به خود کلاس و اعضای داخل آن است. بدین منظور چندین حالت و سطوح دسترسی داریم که در ادامه به توضیح آن ها خواهیم پرداخت
اعضای خصوصی یک کلاس
بخش های یک شئ به دو دسته ی اصلی تقسیم می شوند : آن دسته ای که به آن دسترسی دارید و آن دسته ای که دسترسی به آن ها برای شما مقدورنمی باشد. برای مثال، ماشینی که در خیابان پارک شده را می توان دید، آن را لمس کرد ولی موتور آن برای شما قابل رویت و دسترسی نیست. به اجزایی از کلاس که در دسترس عموم قرار دارند public گفته می شود.
اعضای عمومی یک کلاس
بخش هایی از کلاس که از دید و دسترسی عموم پنهان است private تلقی می گردد. در زبان C# برخی اعضای کلاس در اختیار دیگر کلاس ها قرار می گیرند و در عین حال برخی دیگر اعضای کلاس از دید و دسترس کلاس های دیگر پنهان می شوند. برای محدود کردن سطح دسترسی به بخش یا عضوی از کلاس که باید مخفی یا خصوصی باقی بماند از کلید واژه ی private استفاده می شود. حال، برای در دسترس قرار دادن آن بخش از کلاس که خصوصی محسوب نمی شود، باید متغیر را با کلید واژه ی public تعریف کرد. به کلید واژه های public و private سطح دسترسی (access level) نیز گفته می شود. به صورت پیش فرض، تمامی متغیر های عضوی که تعریف می کنید ولی سطح دسترسی آن را مشخص نمی کنید، private محسوب می شوند و بدین ترتیب برای غیراعضای یک کلاس قابل دسترسی نمی باشد. به این خاطر چنانچه می خواهید عضوی را برای غیراعضای یک کلاس قابل دسترس کنید، باید آن را با کلید واژه ی puplic تعریف کنید. می توان ترکیبی از اعضای خصوصی و عمومی در کلاس خود ایجاد کرد و هیچ قانون خاصی مبنی بر این که کدام اول باید فهرست شود و کدام آخر وجود ندارد.
مثال:
1 2 3 4 5 6 7 8 9 | public class House { string propertyNumber; public char propertyType; byte stories; public uint bedrooms; private decimal value; } <button></button> |
فقط به خاطر داشته باشید که در صورت تعیین نکردن سطح دسترسی، عضو کلاس تعریف شده خودکار خصوصی یا private می شود. برای جلوگیری از بروز هر نوع خطا، حتماً توصیه می شود سطح دسترسی عضو کلاس را مشخص کنید.
1 2 3 4 5 6 7 8 9 | public class House { public string propertyNumber; public char propertyType; public byte stories; public uint bedrooms; public decimal value; } <button></button> |
تعیین سطح دسترسی به اعضای کلاس
کلاس storeitems را به صورت زیر اصلاح کنید.
1 2 3 4 5 6 7 8 | public class StoreItem { public long itemNumber; public string itemName; public string size; public decimal unitPrice; } <button></button> |
مبانی کلاس ها (قسمت چهارم) - اعضای داخلی کلاس
دیدیم که کلیدواژه ی public به اشیای خود برنامه و برنامه های دیگر اجازه می دهد که به عضو عمومی یک کلاس دسترسی پیدا کنند. در حالی که با استفاده از کلید واژه private تنها به اعضای خود آن کلاس اجازه ی دسترسی به اعضای خصوصی را فراهم می کردیم. چنانچه مایل هستید عضوی ایجاد کنید که تنها برای اعضا و اشیإ خود آن کلاس قابل دسترسی باشد، لازم است آن را با کلید واژه ی internal علامت گذاری کنید. تفاوت بین این کلید واژه ها در زیر شرح داده شده.
مقدار دهی اولیه ی شی - عملگر نقطه (.)
به منظور دستیابی به عضوی از کلاس از طریق کلاسی دیگر، ابتدا باید متغیری از آن کلاس را تعریف کنید. اکنون، برای دسترسی به عضو موردنظر از عملگر "." استفاده کنید. پس از تعریف نمونه ای از کلاس، می توان به اعضای کلاس نام برده دسترسی داشت و به آن ها مقادیر دلخواه را تخصیص داد. به مثال زیر توجه کنید.
1 2 3 4 5 6 7 8 9 10 11 12 13 | public class Exercise { static void Main() { var property = new House(); System.Console.WriteLine( property.propertyNumber = 283795); System.Console.WriteLine( property.propertyType = "Single Family" ); System.Console.WriteLine( property.bedrooms = 4); System.Console.WriteLine( property.value = 652880); System.Console.ReadLine(); } } <button></button> |

به خاطر دارید که داده های نوع اولیه (primitive types) می توانند علامت سوأل داشته باشند.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | public class House { internal long ? propertyNumber; internal string propertyType; internal uint ? bedrooms; internal double ? value; } public class Exercise { static void Main() { var property = new House(); System.Console.WriteLine( property.propertyNumber = 283795); System.Console.WriteLine( property.propertyType = "Single Family" ); System.Console.WriteLine( property.bedrooms = 4); System.Console.WriteLine( property.value = 652880); System.Console.ReadLine(); } } <button></button> |
پس از مقدار دهی اولیه ی فیلد یک کلاس، می توان با به کار بردن عملگر "." به آن دسترسی پیدا کرده، سپس مقدار آن را بازیابی کرد.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | public class House { internal long ? propertyNumber; internal string propertyType; internal uint ? bedrooms; internal double ? value; } public class Exercise { static void Main() { var property = new House(); property.propertyNumber = 283795; property.propertyType = "Single Family" ; property.bedrooms = 4; property.value = 652880; System.Console.WriteLine( "=//= Altair Realtors =//=" ); System.Console.WriteLine( "Properties Inventory" ); ; System.Console.Write( "Property #: " ); System.Console.WriteLine(property.propertyNumber); System.Console.Write( "Property Type: " ); System.Console.WriteLine(property.propertyType); System.Console.Write( "Bedrooms: " ); System.Console.WriteLine(property.bedrooms); System.Console.Write( "Market Value: " ); System.Console.WriteLine(property.value); System.Console.ReadLine(); } } <button></button> |
نتیجه ی زیر را به دست می دهد.
=//= Altair Realtors =//= Properties Inventory Property #: 283795 Property Type: Single Family Bedrooms: 4 Market Value: 652880 Press any key to continue...
به کاربردن فیلدهای یک کلاس
در بالاترین قسمت Code Editor، روی DepartmentStore.cs کلیک کرده تا به فایل دسترسی پیدا کنید. فایل بالا را بدین ترتیب اصلاح کنید.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | class DepartmentStore { static void Main() { StoreItem si = new StoreItem(); si.itemNumber = 720823; si.itemName = "Cotton Seam Sheath Dress" ; si.size = "6" ; si.unitPrice = 158M; System.Console.WriteLine( "Department Store" ); System.Console.Write( "Item #: " ); System.Console.WriteLine(si.itemNumber); System.Console.Write( "Item Name: " ); System.Console.WriteLine(si.itemName); System.Console.Write( "Item Size: " ); System.Console.WriteLine(si.size); System.Console.Write( "Unit Price: " ); System.Console.WriteLine(si.unitPrice); System.Console.ReadKey(); } } <button></button> |
برنامه را اجرا کنید. نتیجه ی زیر حاصل می گردد.
Department Store Item #: 720823 Item Name: Cotton Seam Sheath Dress Item Size: 6 Unit Price: 158
حال، کادر پیغام message box)) را ببندید.
به کاربردن نوع ناشناس
همان طور که پیش تر ذکر شد، برای به کاربردن کلاس ابتدا باید متغیری برای آن تعریف کرده، سپس آن را مقدار دهی اولیه کنید. خوشبختانه به منظور مقدار دهی اولیه یک شی، نیازی به استفاده از کلاس نیست. می توان متغیری مشابه نمونه ی کلاس تعریف کرده، بعد آن را به صورت دلخواه مقدار دهی اولیه کرد. از این نوع با نام anonymous type ( یا نوع ناشناس) یاد می شود. به منظور استفاده از آن کافی است متغیر مورد نظر را با کلید واژه ی var تعریف کرده و به منظور تخصیص حافظه به آن از عملگر new استفاده کنید. به جای استفاده از اسم کلاس، ابتدا علامت {} را درج کرده، سپس عملگر new را تایپ کنید. حال در {} اسمی برای تک تک اعضا انتخاب کرده، گویی دارید اسم عضو های کلاس را تعریف می کنید، سپس هر متغیر عضو را با value های دلخواه مقدار دهی اولیه کنید. پس از علامت {}، تعریف را با (;) به پایان برسانید.
مثال:
1 2 3 4 5 6 7 8 9 10 11 12 13 | public class Exercise { static void Main() { var BookInformation = new { Title = "Calculus 6e Edition" , Pages = 1074, Cover = "Hard Back" }; } } <button></button> |
پس از مقدار دهی اولیه ی نوع ناشناس، می توان با تایپ کردن به ترتیب اسم متغیر، عملگر نقطه، متغیر عضو، به تک تک اعضای آن دسترسی پیدا کرد.
مثال:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | public class Exercise { static void Main() { var BookInformation = new { Title = "Calculus 6e Edition" , Pages = 1074, Cover = "Hard Back" }; System.Console.WriteLine( "=//= BookInformation =//=" ); System.Console.Write( "Title: " ); System.Console.WriteLine(BookInformation.Title); System.Console.Write( "Nbr of Pages: " ); System.Console.WriteLine(BookInformation.Pages); System.Console.Write( "Type of Cover: " ); System.Console.WriteLine(BookInformation.Cover); System.Console.ReadLine(); } } <button></button> |
نتیجه ی زیر حاصل می گردد.
=//= BookInformation =//= Title: Calculus 6e Edition Nbr of Pages: 1074 Type of Cover: Hard Back Press any key to continue...
به خاطر داشته باشید که قرار دادن تعریف در خط های متعدد فقط خواندن آن را سهل می کند. می توان تمامی جزئیات را در خطی یکسان قرار داد.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | public class Exercise { static void Main() { var book = new { Title = "Calculus 6e Edition" , Pages = 1074 }; System.Console.WriteLine( "=//= BookInformation =//=" ); System.Console.Write( "Title: " ); System.Console.WriteLine(BookInformation.title); System.Console.Write( "Nbr of Pages: " ); System.Console.WriteLine(BookInformation.pages); System.Console.ReadLine(); } } <button></button> |
مدیریت فیلدهای کلاس
برای سهولت و مدیریت بهتر فیلدهای یک کلاس، Code Editor از دو combo box بهره می گیرد.

Combo box سمت چپ، کلاس های موجود در فایل جاری را نمایش می دهند. Combo box سمت راست، اعضای انتخابی کلاس از Combo box سمت چپ را به نمایش می گذارد.

نحوه ی دسترسی به فیلد
از راه های مختلفی می توان به فیلد دسترسی پیدا کرد از جمله فایل دربردارنده ی کلاس را باز کنید. همان طور که مشاهده می کنید، فیلد در فایل بیان شده قابل رویت می باشد فایل حاوی کلاس را باز کنید. به main menu مراجعه کرده، گزینه های Edit -> Quick Find را انتخاب کنید. اسم فیلد مورد نظر را تایپ کرده، روی Find Next کلیک کنید. لازم به ذکر است که در این روش، باید اسم دقیق فیلد مورد نظر را از قبل داشته باشید. در قسمت بالایی بدنه ی پنجره ی Class View، روی اسم کلاس حاوی فیلد کلیک کنید. لیست اعضای آن در قسمت پایینی بدنه ی پنجره نمایان می شود. اکنون می توانید روی آن دوبار کلیک کنید. در بخش فوقانی بدنه ی Class View، روی اسم کلاس حامل فیلد کلیک کنید. در قسمت پایینی Class View، روی اسم فیلد راست کلیک کرده، سپس گزینه ی Go To Definition را کلیک کنید.
تغییر اسم فیلد
می توان اسم فیلد را باب میل تغییر داد. کافی است فیلد را در فایل مورد نظر پیدا کرده و با دانش خود از ویرایش متن (text editing) نام فیلد را اصلاح کرد. سرانجام، می توانید پس از باز کردن فایل حاوی کلاس، در main menu روی Edit -> Quick Replace کلیک کنید، اسم فیلد را تایپ کرده، سپس Find Next یا Replace را انتخاب کنید. این روش برای بازدید کردن از تمام بخش هایی که فیلد در آن به کار رفته بسیار کارامد است. محیط برنامه نویسی visual studio برای این امر بسیار مناسب است.
به منظور تغییر اسم در محیط visual studio
فایل حاوی کلاس را باز کنید. یا کلیدهای Ctrl + H را با هم بزنید، و یا در main menu روی گزینه ی Quick Replace کلیک کنید. حال، در قسمت Find What، اسم فیلد را وارد کرده و Replace All را انتخاب کنید. فایل حامل کلاس را باز کنید. روی فیلد مورد نظر کلیک کنید تا علامت ^ (caret) در آن قرار داده شود. کلیدهای Ctrl + H را بزنید و یا در main menu، Quick Replace را کلیک کنید. combo box ای به نام Find What ظاهر می شود که در آن فیلد انتخابی را وارد کرده، سپس روی دکمه ی Replace All کلیک کنید. در سمت بالایی پنجره ی Class View، باید روی اسم کلاس کلیک کنید. در قسمت پایینی پنجره، روی فیلد راست کلیک کرده سپس Rename را انتخاب کنید... حال، در کادر متن New Name اسم دلخواه فیلد را درج کنید. برای تنظیم و تغییر اسم در بخش comment ها و stringها، باید به checkbox ها مراجعه کرد. پس از انجام دستورات بالا، روی ok کلیک کنید. در پنجره ی محاوره Preview Changes – Rename، فهرستی از تمامی بخش هایی که فیلد در آن به کار رفته نمایان می باشد. اکنون گزینه Apply را انتخاب کنید.