Non-Primitive Type ها در سی شارپ - کلاس ها
سلام ، امیدوارم عالی باشی . من پوریا منتخبم و تو این مقاله میخوام در مورد Non-Primitive Type ها براتون بنویسم . اما Non-Primitive ها چین و چه کاربردی دارن ؟
Non-Primitive Type
از انواع Non Primitive ها میتونم به Class ها ، Structure ها و یا به طور مثال Enum ها اشاره کنم . بزارین با کلاس ها شروع کنم . تو این مقاله (مقایسه سی شارپ و دات نت ) یه توضیح اجمالی در مورد CLR دادم که یه اشاره کوچیک به کلاس ها داشتم اما اگه بخوام به طور کامل تر توضیح بدم به این صورته که : در واقع کلاس ها بلاک های سازنده برنامه ما محسوب میشن . این کلاس ها از مجموعه ای از فیلد ها ، متغیر ها و توابع تشکیل میشن .
یه مثال ساده میزنم : یه انسان رو به عنوان یک کلاس در نظر بگیریم که یه سری مشخصات داره مثل نام ، سن ، قد و وزن و ... که هم این موارد تحت عنوان Fields ها شناخته میشن و یه سری رفتار ها داره مثل راه رفتن ، غذا خوردن ، خوابیدن و یا صحبت کردن که این موارد هم تحت عنوان Method ها شناخته میشن . این کلاس یه نوع یا یه طرح اولیه از اون شیئی هست که میخوایم بسازیم . (هر نمونه از کلاسمون = شی یا همون Object ) مثلا ما میتونیم چند تا نمونه به اسم های مختلف مثل پوریا ، اسم خودت که داری این مقاله رو میخونی و یا هر اسم دیگه ای رو در نظر بگیریم و این کلاس ها در نهایت با همدیگه همکاری میکنن تا یه نیاز و یه خدمتی رو ارائه بدن .
نحوه تعریف کلاس ها در زبان برنامه نویسی سی شارپ به شکل زیره :
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