فضای نام کلاس متد شی صفات و خصوصیات در دو قسمت قبلی آموزش با انواع داده ها، متغیرها، ثوابت، عملگرها و تبدیل نوع آشنا شدیم.الان وقت آن رسیده است که نحوه ی برنامه نویسی را یاد بگیریم. همان طور که قبلا گفته شد سی شارپ یک زبان برنامه نویسی شی گرا و در اصطلاح کاربر پسند (User friendly) است.برای شروع برنامه ابتدا باید با یک سری مفهومات آشنا شوید و نحوه ی ارتباط آن ها را درک کنید. ۳-۱ فضای نام یک فضای نام، شامل مجموعه ای از کلاس های تعریف شده در سی شارپ است.هنگامی که در یک برنامه بخواهید از کلاس های موجود در کتابخانه ی سی شارپ استفاده کنید باید فضای نامی که کلاس مورد نظر در آن قرار دارد را صدا بزنید (احضار کنید).احضار یک فضای نام در اول برنامه، در کدهای اولیه و با استفاده از عبارت using انجام می شود.system فضای نامی است که به طور متداول در برنامه های خود از ان ها استفاده خواهید کرد.برای فراخوانی این فضای نام از دستور زیر استفاده می شود. using system; فضای نام system دارای کلاس های متنوع و پرکاربردی می باشد. راه دیگری برای فراخوانی فضاهای نام وجود دارد که در قسمت های بعدی به آن پرداخته خواهد شد. ۳-۲ کلاس در سی شارپ شروع کار برنامه نویسی با نوشتن یک کلاس است.هر کلاس می تواند شامل یک یا چند متد باشد که هر کدام از متد ها کار خاصی که برای آن ها تعریف شده است را انجام می دهند.بدنه ی یک کلاس همواره بین {} قرار خواهد گرفت. ۳-۳ متد متد ها زیر مجموعه ای از کلاس ها هستند که با توجه به تعریف آن ها، کار خاصی را انجام می دهند.در واقع متد ها خود می توانند دارای چندین کد باشند که در یک مجموعه به نام متد گرد آمده اند و وظیفه ی خاصی را به عهده دارند.هر وقت در برنامه نیاز باشد آن کار خاص انجام گیرد می توان متد را فراخوانی نمود.متدها این توانایی را دارا می باشند که پس از انجام کار خود، مقداری را برگردانند و یا به عبارتی گزارش کنند.در صورتی که در اعلان متد از کلمه ی کلیدی void استفاده شده باشد به این معناست که این متد مقداری را بر نمی گرداند.در این مورد در قسمت های بعدی بحث خواهد شد. متد Main() پرکاربرد ترین متد در برنامه های سی شارپ است به طوری که در هر برنامه برای اجرا باید این متد اعلان شود.دقت کنید که متدها همواره با () ظاهر می شوند که آرگومان های متد در این پرانتز ها قرار خواهند گرفت.آرگومان ها ورودی های مورد نیاز یک متد هستند.البته متد ها بسته به کارایی آن ها می توانند به گونه ای اعلان شوند که به ورودی نیاز نداشته باشند. ۳-۴ شی برای آن که برنامه ی شما بتواند یک کلاس را اجرا کند باید حد اقل یک شی از آن کلاس را ایجاد کنید.به همین دلیل است که به سی شارپ زبان شی گرا گفته می شود.هر شی در یک برنامه دارای صفات و خصوصیاتی است. ۳-۵ صفات و خصوصیات هر شی که در یک برنامه استفاده می شود دارای خواص و صفات مخصوص به خود است که این صفات از دید سایر اشیا پنهان می مانند.در واقع یک شی فقط به صفات خود دسترسی دارد و از خواص سایر اشیا بی خبر است. صفات یک شی به طور مستقیم قابلیت دسترسی برای کاربر ندارند و برای رسیدن به آن ها می توان از خصوصیات آن شی استفاده کرد.خصوصیات حاوی دسترس های set و get هستند که برای ذخیره سازی مقدار در متغیر و خواندن مقدار متغیر ها استفاده می شوند. حال بیایید با یک مثال و مدل سازی با استفاده از آن چه در اطرافمان وجود دارد به طور واضح تر این مفاهیم را به هم ارتباط دهیم: یک فضای نام با عنوان وسایل حمل و نقل را در نظر بگیرید.این فضای نام شامل کلاس هایی مانند وسایل حمل و نقل زمینی، هوایی و دریایی و همچنین وسایل حمل و نقل شخصی و یا باری می باشد.از آن جا که این کلاس ها دارای یک سری ویژگی های مشترکی می باشند همگی در یک فضای نام گرد آمده اند.حال یک خودروی شخصی را به عنوان یک شی از کلاس وسایل حمل و نقل زمینی در نظر بگیرید.این خودرو از روی نقشه و طرح اولیه در یک کارخانه تولید شده و شما برای رانندگی با آن نیازی ندارید که در مورد نحوه ی ساخته شدن آن اطلاعاتی داشته باشید.به عنوان مثال ترمز گرفتن فرایند پیچیده ای است که سبب می شود سرعت خودرو کم شود در حالی که شما فقط با فشار آوردن روی پدال ترمز می توانید به راحتی این کار را انجام دهید.کاری که پدال ترمز انجام می دهد دقیقا همان کاری است که یک متد در برنامه شما انجام می دهد.متد writeline متنی که شما انتظار دارید را بر روی صفحه چاپ می کند و این در حالی است که شما از نحوه ی چاپ این متن و کد های بدنه ی این متد اطلاعاتی ندارید.متنی را که برای چاپ شدن به متد می فرستید آرگومان نام دارد. اگر شما یک نقشه و طرح از ساخت ماشین در دست دتشته باشید نمی توانید ا آن نقشه رانندگی کنید مگر آن که قبلا خودرو ساخته شده باشد.شما در برنامه خود نیز از یک کلاس نمی توانید استفاده کنید مگر آن که یک شی از آن کلاس را ایجاد کنید.همان طور که یک خودرو دارای صفاتی مانند رنگ، جنس بدنه، میزان سرعت و قدرت و حجم باک سوخت است، یک شی نیز دارای صفات خاص خود است که همواره با آن همراه می باشد. در قسمت بعدی اموزش با مثال های مختلف، درک بهتری از این مفاهیم پیدا خواهید کرد. << پروژه اول لیست دروس درس دوم >> منبع:انجمن مهندسی شیمی
امیدوارم با استفاده از توضیحات و دو پروژه ی ارائه شده در قسمت های قبلی تا حدودی با مفهوم فضای نام، کلاس، شی، متد و خاصیت آشنا شده باشید.در این قسمت از آموزش قصد دارم نکات تکمیل کننده ای از بحث های قبل را ارائه کنم. فضای نام محلی برای نگه داری کلاس ها و در حقیقت مجموعه ای از چند کلاس است که ویژگی های مشتری دارند.هدف از ایجاد کلاس ها دسترسی آسان و سریع برنامه نویس به مجموعه ای از کد هاست.با توجه به وجود تعداد زیادی کلاس، آن ها با توجه به ویژگی هایی که دارند در فضاهای نام جداگانه ای طبقه بندی می کنند.یکی از فواید این طبقه بندی این است که امکان تولید کلاس هایی با نام یکسان بوجود می آید که این کلاس ها باید در فضاهای نام متفاوتی قرار بگیرند.در یک فضای نام دو کلاس با نام یکسان نمی توانند وجود داشته باشند. کلاس ها دارای دو نوع سطح دسترسی public و internal هستند که در هنگام تعریف یک کلاس نوع دسترسی آن را نیز تعیین می کنیم.سطح دسترسی public به این معنی است که کلاس خارج از فضای نامی که در آن قرار دارد قابل استفاده است و سطح دسترسی internal مشخص می کند که استفاده از کلاس فقط در داخل همان فضای نام قابل استفاده است.اگر در هنگام تعریف کلاس سطح دسترسی را تعریف نکنید به طور پیش فرض interna در نظر گرفته می شود. فضای نام ها نیز همانند کلاس ها قابل تعریف هستند.در دو پروژه ی قبل، برای کلاس های خود فضای نامی تعیین نکردیم.در این حالت که برنامه نویس کلاس های خود را بدون تعریف فضای نام برای آن، تعریف می کند خود نرم افزار کلاس ها را در یک فضای نام جنرال یا عمومی قرار می دهد. برای استفاده از کلاس های موجود، ابتدا می بایست فضای نامی که کلاس در آن فضا وجود دارد را با دستور using فراخوانی می کرد اما برای دو پروژه ی قبل برای استفاده از کلاس هایی که خودمان نوشتیم فضای نامی را فراخوانی نکردیم.دلیل درست عمل کردن برنامه ای که نوشتیم این است که کلاس هایی که در یک فضای نام قرار دارند می توانند به هم دسترسی داشته باشند و نیازی به فراخوانی فضای نام نیست.به عنوان مثال در پروژه اول کلاس P1 و P1Test که از P1 استفاده می کند هر دو در یک فضای نام جنرال قرار گرفته بودند. Int و یا float انواع داده ای در زبان C# هستند که برای استفاده از آن ها می بایست یک متغیر از آن نوع تعریف کرد.کلاس ها نیز چنین هستند.برای آن که بتوان از یک کلاس استفاده کرد باید یک شی از آن ساخت.دستور زیر برای تولید یک شی از کلاس استفاده می شود: className obj = new className(); className نام کلاسی است که باید از آن شی تولید گردد و در حقیقت این کلاس نوع داده برای شی تعریف می شود.obj نام شی است و new واژه ای کلیدی برای تولید شی است.className() متدی خاص به نام سازنده ی کلاس است که برای تولید شی به کار می رود.در مورد سازنده ها در ادامه بحث خواهیم کرد. هر کلاس در بدنه ی خود حاوی اعضایی است.این اعضا عبارتند از: ثابت ها فیلد ها متد ها خواص شاخص بند ها رویدادها عملگرها سازنده ها یا مولد ها مخرب ها اعضای یک کلاس می توانند دارای دو سطح دسترسی public و private باشند.اگر سطح دسترسی یک عضو تعیین نشود به طور پیش فرض private در نظر گرفته خواهد شد. در پروژه ی دوم در کلاس خود از خاصیت استفاده کردیم.خاصیت ها در واقع نوعی از متد ها هستند که می توانند داده های خود را مقدار دهند یا مقداری را از داده ی خود بازگردانند.مقدار دهی با دستور set و بازگردانی مقدار با دستور get انجام می گیرد.هنگاهی که یک کد می خواهد خاصیتی را مقدار دهد آن مقدار در value قرار می گیرد و سپس set مقدار درون value را به خاصیت نسبت می دهد.get برای بازگردانی مقدار خاصیت از return استفاده می کند.خاصیت ها می توانند شامل هر دو عمل get و set باشند و یا این که فقط دارای یکی از این دو باشند.هنگامی که یک خاصیت دارای هر دو فرمان get و set برای بازگردانی و نسبت دادن مقدار باشد می توانید از خاصیت های خود پیاده شونده استفاده کنید.به عنوان مثال کد زیر خاصیت خود پیاده شونده ی ChangeName را نشان می دهد و در این حالت نیازی به تعریف متغیر نمونه نیست. Public string ChangeName {get; set:} متد ها مجموعه کد هایی بودند که در هنگام فراخوانی می توانند کار خاصی را انجام دهند.متدی که فراخوانی می شود را متد فراخوانی شونده و متدی که آن متد را فراخوانی کرده است متد فراخوان می نامند.هر متد می تواند دارای پارامتر های ورودی و یک مقدار خروجی باشد.در صورتی که یک متد پس از انجام کار خود مقداری را برگرداند باید نوع مقدار در اعلان متد تعریف شود.متد هایی که در اعلان آن ها از عبارت void استفاده می شود مقداری را در خروجی بر نمی گردانند.پارامتر های ورودی هر متد در بین پرانتز هایی در تعریف آن قرار می گیرند.خط کد زیر تعریف متدی را نشان می دهد که دو پارامتر ورودی به نام های x و y دارد و مقدار s را بر می گرداند. هر سه مقدار x,y و s از نوع داده ی int می باشند. Public int area {int x, int y) { Int s; S=x*y; Return s; } حال می خواهیم در مورد سازنده ها بحث کنیم اما قبل از آن نیاز است که داده ها و انواع آن ها را بهتر بشناسیم.داده ها به دو نوع مقداری و ارجاعی تقسیم می شوند.انواع داده هایی را که تا حالا برای تعریف متغیر ها دیده اید، مانند int و double و … از نوع داده های مقداری هستند و در هر لحظه فقط می توانند شامل یک مقدار باشند. متغیر های ارجاعی حاوی آدرس مکان نگه داری اشیا می باشند که نام متغیر به داده ی موجود در آن اشاره دارد.در پروژه دوم یک شی را از کلاس P2 ایجاد و آدرس ارجاع به شی را در متغیر ObjectP2 که از نوع کلاس P2 بود قرار دادیم.پس در سایر کلاس ها هر وقت که از ObjectP2 استفاده کنیم در واقع به شی کلاس P2 رجوع کرده ایم. متغیر های نوع ارجایی به صورت پیش فرض با عبارت null که به معنی ارجاع به هیچ چیز است مقدار دهی اولیه می شوند. نکته مقدار دهی اولیه، مقداری است که در هنگام تعریف یک متغیر به آن داده می شود. در مقدار دهی به یک متغیر رشته ای، مقدار null با مقدار تهی تفاوت دارد.مقدار تهی که با ” ” نشان داده می شود که متغیر دارای رشته یا مقداری نیست. اما null به این موضوع اشاره دارد که متغیر به هیچ شی ای اشاره نمی کند. و اما در مورد سازنده ها: هر کلاسی که ایجاد می شود حاوی یک سازنده است که این سازنده می تواند اشیایی که از این کلاس ایجاد می شوند را مقدار دهی اولیه کند.عملگر new در هنگام ایجاد یک شی، فضای مورد نیاز برای شی را مشخص کرده و سازنده ی متناظر با کلاس را احضار می کند.در کد زیر پرانتز های بعد از نام کلاس همان سازنده است که بدون ارگومان ورودی می باشد. P2 ObjectP2 = new P2(); در صورتی که بخواهید مقدار دهی اولیه متفاوت با مقدار پیش فرض باشد، می توانید آن مقدار دلخواه خود را در بین پرانتز ها وارد کنید.به عنوان مثال در پروژه دوم در صورتی که عبارت “Reza” را بین دو پرانتز وارد کنید آن گاه خاصیت Name با عبارت Reza مقدار دهی اولیه می شود.البته قبل از آن در کلاس P2 باید سازنده را ایجاد کنید.برای این کار می توانید بعد از کد های ایجاد خاصیت کد های زیر را قرار دهید: (به این نکته ی مهم توجه داشته باشید که نام سازنده با نام کلاس حتما باید یکسان باشد) Public P2(string name) { Name=name } اگر کلاسی فاقد سازنده باشد متغیر های نمونه ی کلاس به صورت پیش فرض مقدار دهی می شوند.۰ برای انواع عددی، false برای نوع bool و null برای انواع ارجاعی. << پروژه سوم لیست دروس پروژه دوم >>