دراین مبحث میخام در مورد کلاس صحبت کنم که یکی از مهمترین مباحث سی
شارپ هست و لازمه یادگیری این موارد تمرین با انواع کلاسها می باشد
موضوع این مبحث آشنایی با کلاس و کاربرد انها میباشد
انواع کلاس
Nested class
Partial class
Anonymous class
ابتدا nested class
این نوع کلاس کلاسی هست که درون یک کلاس دیگه ایجاد میکنیم مثلا ما
کلاسی بنام کلاس One داریم و یک کلاس بنام کلاس Two درون اون ایجاد میکنیم که این Two نوع کلاس همون کلاس nested هست توجه داشته باشید اولین حرف کلاس با حرف بزرگ نوشته میشود
و کاربرد های زیادی داره مثلا میتونیم داخل همین کلاس nested یک فیلد ایجاد کنیم که فقط در سطح همون کلاس قابل دسترسی می باشد
یعنی با کدهایی که تعریف میکنیم کاربر به درون کلای یک دسترسی خواهد داشت ولی
کلاس2فرمانهای مارو که از قبل تعریف کردیم اجرا میکنه و دسترسی اون محرمانه(private) خواهد بود
توجه داشته باشید که ما میتونیم به کلاسهای سطح بالا یعنی کلاسهایی که
درون هیچ کلاسی نیستند 2نوعAccess Modifier یا سطح دسترسی بدیم-public-internal
اما به کلاس nested میتونیم سطوح دسترسی
مختلفی همچون protected-private--
public-internalو همچون سطح دسترسی protected
internal بدیم
اما در حالت پیشفرض اگر در حین نوشتن برنامه هیچگونه سطح دسترسی به
کلاسnested ندیم اون محرمانه هست و برای دسترسی به اشیا
و فیلدهای داخل اون میبایست دسترسی اونpublicقرار
بدیم
اما نکته مهم اینه که اگه سطح دسترسی کلاس one با two میباست مکمل هم باشند یعنی اگر کلاسone internal
بود کلاس two نیز میتونه از اون استفاده کنه یا باید همسطح هم باشند یا باید
سطح دسترسی از کلاس بالایی سختگیرانه تر باشد
مثال:
class One
{
class Two
{
}
}
حال برای دسترسی به درون کلاس nested میبایست ابجکتی رو تعریف
کنیم ایتدا با فراخوانی کلاس one و همچنینtwo بصورت سلسه مراتبی کلاس را فراخوانی میکنیم
******************************************************************************
قسمت دوم partial class
این کلاس بصورتی هست که میتونه در 2 یا حتی 5 تا فایل فیزیکی جداگانه
قرار بگیره بصورت مثال یعنی با ایجاد 2 تا فایل فیزیکی در پروژه هدف داده های رو
در فایل اصلی از هردو کلاس فراخوانی میکنیم یعنی هردو کلاس متحدا یه دستور رو
ارائه خواهند نمود
کاربرد این نوع کلاس اکثرا در پروژه های تیمی نمود پیدا میکنه زمانیکه
به هریک از برنامه نویسان تیم یک کلاس اختصاص داده شده و هریک در کلاس خود پروژه
رو تکمیل میکنند در نهایت همه کلاسها تکمیل کننده پروژه خواهند شد
بصورت مثال 2تا فایل کلاس بصورت فیزیکی در پروژه مدنظرمون ایجاد
میکنیم و اسم اونا رو میزایم test1 و test2
حال داخل کلاس برابر کدهای زیر قبل از اسم کلاس کلمه کلیدی partial رو قرار میدیم توجه داشته باشید لازم نیست حتما نام کلاس با نام
کلاس فیزیکی یکسان باشد اما در اینجا یعنی در کلاسpartial نام کلاسها یکسان میباشد
partial class Test
{
}
حال در کلاس تست1 دوتا فیلد با متغیرهای name—و last از نوع استرینگ قرار
میدیم و برای اونا به ترتیب کلمه های c# و learning
رو قرار میدیم
partial class Test
{
public string name = "mehrdad";
public string last = "naderi";
}
حال تو کلاس تست2 یک متد برای تکمیل
فیلدهای کلاس تست1 ایجاد میکنیم بدین صورت که ابتدا یک کلاس با نام esm
ساخته ودر خط چاپ نام و نام خانوادگی رو پشت سر هم قرار داده و دستور چاپ در کنسول میدیم
partial class Test
{
public void esm()
{
Console.WriteLine(name + "" + last);
}
}
حال در کلاس program در متدmain یه ابجکت از کلاسها میسازیم و بعد متد اسم
رواز کلاس تست فراخوانی میکنیم و دستور
چاپ در کنسول رو میدیم میبینید که با فراخوانی متدها و فیلدهای 2 یا چند کلاس کلاس
میتونیم اونارو در کلاس اصلی اجرا کنیم
با این ترتیب وقتی یه نمونه از
کلاس در خط اول ساخته میشه و در خط دوم متد esmفراخوانی شده و دستورات اجرا میشن
Test clas = new Test();
clas.esm();
Console.ReadKey();
--حال کلاسstatic
کلاس استاتیک می بایست با درج
کلمه کلیدی static در اول کلاس و تعیین یک
نام ایجاد میشه و هر فیلد یا ممبر و یا متدی که تعریف میشه در داخل این کلاس بصورت
استاتیک هست بصورت مثال اگه داخل کلاس یه متد از نوعpublic تعریف بشه اون متد کار
نخواهد کرد و توسط دیباگر خطا گرفته میشه
مثال
Static class Test
{
Public int age; //false
Publice static int age; //tru
}
اما اخرین مبحث Anonymous class
این کلاس بسیار کاربری و خاص هست لازمه این کلاس تمرین زیادی بشه تا
بهش تسلط داشته باشید این کلاس Anonymous کلاسی
هست که اسم نداره یعنی برنامه نویس مستقیم ابجکت اونو میسازه یعنی با توجه به
اینکه نمیدونیم کاربر چه مقداری میخاد وارد کنه و
جس کلاس رو خود دیباگر برامون تعیین میکنه یا وقتی نمیدونیم جنس کلاس چیه
از کلمه ملیدی varاستفاده میکنیم البته نه در کلاس در هرجایی
مورد مشابه پیش اومد از این متغییر ستفاده میکنیم
مثال
var anonobj = new {name="csharp" ,num=12};
خط بالایی واقعا یه instance هست و خود کامپایلر تشخیص
میده که جنس ورودی رشته یا عدد هست خوبی این کلاس اینه که سریع تعریف میشه اما محدودیتهایی
هم داره
مثلانمیتونی متغییر رو خالی بزاری تابعدا بهش مقدار بدی و یا همه
فیلدهای anonymous بصورت پابلیک هستند یعنی
نمیتونی سطح دسترسی براشون تعیین کنیدیا نمیتونی توش متد تعریف کنی فقط فیلد میشه
تعریف کرد
و پس از تعریف کلاس میتونی تو یک خط اونو فراخونی و چاپ کنی
var anonobj = new {name="csharp" ,num=12};
Console.WriteLine(anonobj.name);
Console.ReadKey();
توجه داشته باشید کنار
همین کاس میتونید کلاس دیگه هم بسازید فقط کافیه نام کلاس رو تغییر بدید