Non-Primitive Type ها در سی شارپ - کلاس چیست

Non-Primitive Type ها در سی شارپ - کلاس ها

تخمین مدت زمان مطالعه : 10 دقیقه
  • سطح مقاله : مقدماتی
  • نویسنده : پوریا منتخب

سلام ، امیدوارم عالی باشی . من پوریا منتخبم و تو این مقاله میخوام در مورد Non-Primitive Type  ها براتون بنویسم . اما Non-Primitive  ها چین و چه کاربردی دارن ؟

Non-Primitive Type 

از انواع Non Primitive  ها میتونم به Class  ها ، Structure  ها و یا به طور مثال Enum  ها اشاره کنم . بزارین با کلاس ها شروع کنم . تو این مقاله (مقایسه سی شارپ و دات نت ) یه توضیح اجمالی در مورد CLR  دادم که یه اشاره کوچیک به کلاس ها داشتم اما اگه بخوام به طور کامل تر توضیح بدم به این صورته که : در واقع کلاس ها بلاک های سازنده برنامه ما محسوب میشن . این کلاس ها از مجموعه ای از فیلد ها ، متغیر ها و توابع تشکیل میشن .

یه مثال ساده میزنم : یه انسان رو به عنوان یک کلاس در نظر بگیریم  که یه سری مشخصات داره مثل نام ، سن ، قد و وزن و ... که هم این موارد تحت عنوان Fields ها شناخته میشن و یه سری رفتار ها داره مثل راه رفتن ، غذا خوردن ، خوابیدن و یا صحبت کردن که این موارد هم تحت عنوان Method  ها شناخته میشن . این کلاس یه نوع یا یه طرح اولیه از اون شیئی هست که میخوایم بسازیم . (هر نمونه از کلاسمون = شی یا همون Object  ) مثلا ما میتونیم چند تا نمونه به اسم های مختلف مثل پوریا ، اسم خودت که داری این مقاله رو میخونی و یا هر اسم دیگه ای رو در نظر بگیریم و این کلاس ها در نهایت با همدیگه همکاری میکنن تا یه نیاز و یه خدمتی رو ارائه بدن .

یک نمونه ساخته شده از کلاس در c#

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

public class Person
    {
 	private string Name;
	public void Introduce()
        {
            Console.WriteLine("Hi, My name is : " + Name);
        }
    }

Access Modifier

در ابتدا برای تعریف کلاس از Access Modifier  ها استفاده میکنیم سپس واژه class و در انتها نام کلاس مورد نظرمون  .Access modifier  مشخص میکنه چه کسی میتونه به این کلاس دسترسی داشته باشه . فعلا در مورد Access Modifier  ها نمیخوام صحبت کنم . درون کلاس ها ما میتونیم متغیر هامون رو تعریف کنیم که میشن همون فیلد هامون .  توجه داشته باشین برای تعریف فیلد ها هم درابتدا از Access Modifier  ها ااستفاده می کنیم . کلاس ها میتونن شامل متد ها باشن که رفتار هامون رو مشخص میکنن . تو این مثال متد ما از نوع void  هست که میگه این متد مقداری رو به عنوان خروجی برنمیگردونه . همچنین مقداری یا پارامتری رو به عنوان ورودی هم قبول نمیکنه . فقط یه متن رو در خروجی کنسول ما چاپ میکنه .

یه مثال دیگه میزنم

public class Calculator
    {
        public int Add(int a ,int b)
        {
            return a + b;
        }
    }

کلاس Calculator یه متد داره تحت عنوان Add  که دو تا مقدار عددی صحیح رو دریافت می کنه و جمع اون دو تا مقدار رو به عنوان خروجی برمی گردونه . تا اینجا ما تونستیم یه کلاس رو بسازیم اما مرحله بعدش چیه . چطوری میتونیم از این کلاس استفاده کنیم ؟ جواب خیلی سادس . در ابتدا باید یک نمونه از این کلاس بسازیم . در تعریف متغیر ها گفتم در ابتدا نوع اون متغیر و سپس نام متغیر رو تعریف می کنیم . برای تعریف یک نمونه از کلاس هم به همین صورت در ابتدا نام کلاس که نوعمون هست رو ذکر می کنیم و سپس نامی که برای اون نمونمون در نظر گرفتیم  .

int number;
Calculator calc;

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

Calculator calc = new Calculator();

در نمونه سازی از کلاس ها بر خلاف متغیر ها ما باید به صورت Explicit حافظه ای رو بهش اختصاص بدیم که بالا بهش اشاره کردم اما بر خلاف زبان هایی مثل Objective C  یا C++  ، نگرانی از این تخصیص حافظه نداریم . ما CLR رو داریم و اون این کارو برای ما انجام میده (تو این مقاله در مورد CLR  توضیح کامل دادم حتما بخونش )  .در CLR  یه پروسه داریم تحت عنوان Garbage Collection   که بصورت اتوماتیک تمام شی های ساخته شده بلااستفاده رو پاک می کنه و از سر بار حافظه جلوگیری می کنه .

حالا ما میتونیم با استفاده از نمونه ای که ساختیم به اعضای کلاس مون دسترسی داشته باشیم : مثلا

var result = calc.Add(15, 25);

یه سوال : آیا هر زمان که میخوام از کلاس استفاده کنم باید یک نمونه ازش بسازم تا بتونم به اعضای اون کلاس دسترسی داشته باشم ؟

جواب خیر هست . ما میتونیم از کلید واژه Static در تعریف کلاس هامون استفاده کنیم اما خب این آقای Static  چیه و چیکار می کنه برامون ؟ وقتی کلاسی رو به صورت non-static  تعریف می کنیم با هر بار نمونه سازی از اون کلاس ، یک نمونه جدید تو حافظه ایجاد میشه . مثلا از کلاس Calculator اگه 3 بار نمونه سازی کنیم ، در حقیقت سه تا متد Add جداگونه داریم اما در کلاس های static  فقط یک نمونه از این کلاس در حافظه میشینه و ما در نهایت فقط یه دونه متد Add داریم . خب اصا چه کاریه ؟ چرا باید از static ها استفاده کنیم ؟ زمانی که میخوایم از اون شی مون فقط یه دونه تو حافظه موجود باشه و تمام عملیات مربوطه فقط درون همون کلاس صورت بگیره و نه در نمونه ای دیگه . دم دستی و ساده ترین مثالی که میتونم بزنم همین کلاس Program  تو کنسول اپ هامون هست .

class Program
   {
       static void Main(string[] args)
       {
           Console.WriteLine("Hello World!");
           
       }
   }

خب تا اینجا یه جمع بندی می کنیم : ما یاد گرفتیم که اعضای تشکیل دهنده یک کلاس که عضوی از خانواده non-primitive type  ها هستن ،  چیان و چطوری میشه یه کلاس ایجاد کرد . نمونه سازی از کلاس رو یاد گرفتیم و در نهایت تفاوت کلاس های static  و  .non-static

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

ارادت . پوریا منتخب

منبع : سلسله آموزش های Mosh Hamedani