دراین مبحث میخام در مورد کلاس صحبت کنم که یکی از مهمترین مباحث سی شارپ هست و لازمه یادگیری این موارد تمرین با انواع کلاسها می باشد 
موضوع این مبحث آشنایی با کلاس و کاربرد انها میباشد
انواع کلاس
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();             
                   توجه داشته باشید کنار همین کاس میتونید کلاس دیگه هم بسازید فقط کافیه نام کلاس رو تغییر بدید