آموزش سی شارپ – پروژه اول در قسمت قبلی آموزش با مفهوم کلاس، متد، شی و صفت آشنا شدیم.در این پروژه می خواهیم از آن ها برای نوشتن برنامه ای استفاده کنیم. هدف از ایجاد این برنامه، اعلان یک کلاس و متدی در این کلاس و سپس ساخت یک شی و فراخوانی متد می باشد.در ابتدا برای آموزش برنامه نویسی سی شارپ از محیط کنسول ویژوال استودیو استفاده می کنیم.در این محیط تمامی کد ها و برنامه هایی که می نویسید در محیط cmd اجرا خواهد شد.پس از باز کردن ویژوال استودیو و کلیک بر روی گزینه ی New Project گزینه ی Console Application را انتخاب کنید.در این صورت صفحه ی زیر برای شما باز می شود. این ها کد هایی هستند که خود برنامه برای شما تولید کرده است. همه ی این کد ها را پاک کنید تا برنامه نویسی را از ابتدا شروع کنیم. در سمت راست محیط نرم افزار پنجره ی Solution Explorer را مشاهده می کنید.در صورتی که این پنجره را ندارید از منوی view آن را فعال کنید.در این پنجره فایلی با نام Program و پسوند cs وجود دارد. کد هایی را که می نویسید در این فایل ذخیره می شوند و در کل فایل هایی با پسوند cs محلی برای ذخیره سازی کد ها می باشند.در درس قبل که در مورد متد ها صحبت کردیم متدی به نام Main تعریف شد و گفتیم که هر برنامه برای اجرا باید این متد را دارا باشد.در ابتدا باید برای برنامه یک کلاس تعریف کرد و سپس این متد را در این کلاس تعریف شده نوشت.موردی که خیلی اهمیت دارد این است که فایلی که کد دارای متد Main را در خود نگه می دارد باید هم نام با نام کلاس تعریف شده در آن کد باشد. ممکن است برنامه شما به چند فایل کد نیاز داشته باشد.برای ساخت یک فایل جدید به روش زیر عمل کنید: ۱- بر روی نام پروژه خود در پنجره ی Solution Explorer راست کلیک کنید و در زیر منوی Add گزینه ی New Item را کلیک کنید. ۲- در صفحه ی باز شده Code File را انتخاب کنید. در ابتدا در همان فایل Program.cs یک کلاس و در آن کلاس یک متد را ایجاد می کنیم که این متد متنی را بر روی نمایشگر چاپ می کند.کد زیر این کار را انجام می دهد. ۱٫ using System; ۲٫ ۳٫ public class P1 ۴٫ { ۵٫ public void Message() ۶٫ { ۷٫ Console.WriteLine(“This is the first project”); ۸٫ } ۹٫ } در خط ۱ با استفاده از دستور using فضای نام system را فراخوانی کردیم.این فضای نام دارای کلاس ها و اشیایی از جمله شی console است که با فراخوانی فضای نام در اول برنامه می توان از کلاس ها و متد های آن ها استفاده کرد. در خط ۳ یک کلاس با نام P1 ایجاد کرده ایم.سطح دسترسی این کلاس به صورت public است و به این طریق بقیه ی کلاس ها نیز می توانند به آن دسترسی داشته باشند.برای اعلان یک کلاس بعد از نوشتن نوع سطح دسترسی از کلمه ی کلیدی class و سپس نام کلاس استفاده می شود.بدنه ی کلاس در {} قرار می گیرد. در خط پنجم یک متد با نام Message اعلان شده است.پرانتز های باز و بسته بعد از Message نشان دهنده ی متد بودن آن هستند و خالی بودن آن ها به این معنی است که این متد به آرگومان ورودی نیازی ندارد.بدنه ی متد نیز مانند کلاس در {} قرار می گیرد.عبارت void در اعلان متد نشان دهنده ی این است که این متد پس از انجام کارش هیچ مقداری را به متد فراخوان کننده اش بر نمی گرداند. در خط ۷ کد مربوط به وظیفه ی متد نوشته شده است.متد WriteLine متدی از پیش نوشته شده است که می تواند متنی دلخواه را روی نمایشگر چاپ کند.با استفاده از دستور Console.WriteLine می توان این متد را فراخوانی کرد.عبارتی که در پرانتز و در بین “” قرار می گیرد همان عبارتی است که در نمایشگر چاپ می شود. نکته در ابتدای برنامه با استفاده از دستور using فضای نام system را فراخوانی کردیم تا در ادامه بتوانیم از کلاس های موجود در این فضای نام استفاده کنیم.راه دیگری نیز وجود دارد که می توان این فضای نام را بدون استفاده از using فراخوانی کرد اما این کار توصیه نمی شود چون در صورتی که در یک برنامه بخواهید به دفعات زیاد از کلاس های یک فضای نام استفاده کنید نوشتن کد آن زمان بر و خسته کننده خواهد بود. به عنوان مثال در این برنامه می توانستید به صورت زیر کد بنویسید: system.console.WriteLine(“this is first project”) تا به اینجا متدی را ساخته ایم که هر وقت نیاز داشته باشیم عبارت this is the first project را چاپ کنیم می توانیم آن را فراخوانی کنیم.چون این برنامه متد Main ندارد پس اجرا نمی شود.حال یک فایل کد جدید بسازید و نام آن را به P1Test تغییر دهید.برای تغییر نام می توانید در هنگام ساخت فایل نام آن را تغییر دهید.راه دیگر این است که پس از ساخت فایل در پنجره ی Solution Explorer روی فایل کلیک کنید و در پنجره ی Properties در قسمت File Name نام جدید را وارد کنید. در این فایلی که ساخته اید کد های زیر را وارد کنید. ۱٫ public class P1Test ۲٫ { ۳٫ public static void Main(string[] args) ۴٫ { ۵٫ P1 ObjectP1 = new P1(); ۶٫ ObjectP1.Message(); ۷٫ } ۸٫ } در خط اول یک کلاس با نام P1Test و در خط سوم متد Main را ساخته ایم.در بدنه ی متد Main با استفاده از دستور New یک شی جدید از کلاس P1 را با نام ObjectP1 تعریف کرده ایم (خط ۵) و در خط ششم با استفاده از این شی متد Message را از کلاس P1 فراخوانی نموده ایم.چون متد Message به آرگومان ورودی نیاز نداشت پس پرانتز ها را خالی می گذاریم. عبارت static در اعلان متد Main به این موضوع اشاره دارد که این متد از نوع ایستا است.متد ایستا نوع خاصی از متد هاست چون می توان آن را بدون آن که نیاز به ساخت شی از کلاسی که متد در آن کلاس وجود دارد احضار کرد. همان طور که برای تعریف متغیر ها باید از انواع داده ای مثل int استفاده می کردید برای تعریف یک شی نیز باید از داده ها استفاده کنید. هر کلاسی را که ایجاد می کنید به عنوان یک داده ی جدید در سی شارپ خواهد بود که از آن داده برای ایجاد اشیا می توانید استفاده کنید.در قسمت قبل کلاس P1 را ایجاد کردیم و در کد اخیر از P1 به عنوان نوع داده ای برای ساخت شی ObjectP1 استفاده کرده ایم.دستور New برای ساخت یک شی از کلاس استفاده می شود. * نکته اگر برنامه را اجرا کنید خواهید دید که برنامه اجرا شده و پس از آن به سرعت محیط cmd بسته خواهد شد.برای این که این مشکل را حل کنید م محیط سیاه رنگ پس از اجرای برنامه باز بماند کد زیر را به انتهای کد های خود در متد Main اضاف کنید: system.Console.readkey() با این کار برنامه منتظر می ماند تا شما دکمه ای از کیبرد را فشار دهید و پس از خواندن آن بسته خواهد شد. در قسمت بعدی آموزش همین برنامه ای را که در این جا ساختیم ویرایش کرده و پیشرفته تر خواهیم کرد به طوری که متد ساختگی دارای آرگومان ورودی باشد. << پروژه دوم لیست دروس درس سوم منبع:انجمن مهندسی شیمی
آموزش سی شارپ – پروژه دوم --------------------------- آموزش سی شارپ – پروژه دوم در این پروژه می خواهیم برنامه ای را که قبلا نوشته ایم ارتقا داده و پیشرفته تر نماییم. در پروژه قبل متد Message را به گونه ای نوشتیم که به پارامتری نیاز نداشت.در این جا می خواهیم برنامه را به گونه ای تغییر دهیم که متد دارای پارامتر باشد و مقدار آن پارامتر توسط برنامه ی احضار کننده ی متد، به متد ارسال شود.این مقدار ارسالی که هم جنس با پارامتر متد است، آرگومان نامیده می شود. بعد از انجام این کار و در ادامه می خواهیم به برنامه ی خود خاصیت اضاف کنیم. نکته از این پس کد هایی را که جدید هستند و در درس های قبل در مورد آن ها بحث نشده است را با بک گراند زرد نشان خواهیم داد. فرض کنید می خواهید برنامه ای بنویسید که در آن نام کاربر پرسیده شود و سپس یک پیغام خوشامد گویی با نام وی برایش چاپ شود.در فایل Program.cs کد زیر را وارد کنید: ۱٫ using System; ۲٫ ۳٫ public class P2 ۴٫ { ۵٫ public void Message(string Name) ۶٫ { ۷٫ Console.Write(“wellcome {0}” , Name); ۸٫ } ۹٫ } در خط پنجم برای متد نوشته شده یک پارامتر تعین کرده ایم.این پارامتر Name نام دارد و از نوع داده ی string است.برای این که این متد وظیفه ی خود را به درستی انجام دهد می بایست در متد فراخواننده ی آن آرگومانی از نوع string را به آن ارسال کرد. خط هفتم که بدنه ی متد Message است عبارتی را چاپ می کند.ان چیزی که در این جا جدید به نظر می رسد {۰} می باشد.آن چه که بعد از علامت ، در متد Write آمده جانشین {۰} می شود و در حقیقت با این کار می توان یک متغیر را چاپ نمود.در صورتی که بیش از یک متغیر برای چاپ داشته باشیم از شماره های بعدی به صورت {۱} و {۲} و … استفاده می کنیم و متغیر هایی که می خواهیم چاپ شوند را بعد از ” گذاشته و با ، از هم جدا می کنیم. نکته آن چه که در این جا مهم است بررسی شود تفاوت بین دو متد Write و WriteLine می باشد.در متد WriteLine بعد از چاپ شدن متن مورد نظر، علامت مکان نما به خط بعدی خواهد رفت و در صورتی که متن دیگری برای چاپ داشته باشیم، آن متن در خط بعد چاپ می شود اما متد Write مکان نما را در همان خط نگه می دارد و متن جدید دنباله ی همان متن قبل چاپ خواهد شد.در متد Write برای رفتن به خط جدید از عبارت n/ در بین ” ” استفاده می کنیم. حال که کلاس P2 را کامل کردیم در یک فایل جدید به نام P2Test متد Message را فراخوانی می کنیم.در فایلی که ساخته اید کد های زیر را وارد کنید: ۱٫ using System; ۲٫ ۳٫ public class P2Test ۴٫ { ۵٫ public static void Main(string[] args) ۶٫ { ۷٫ P2 ObjectP2 = new P2(); ۸٫ Console.Write(“Enter your Name: “); ۹٫ string Name = Console.ReadLine(); ۱۰٫ ObjectP2.Message(Name); ۱۱٫ Console.ReadKey(); ۱۲٫ } ۱۳٫ } در خط ۸ با چاپ یک متن از کاربر خواسته شده است که نام خود را وارد کند.خط ۹ عبارت ورودی توسط کاربر را در رشته ی Name ذخیره می کند.متد ReadLine مقداری را خوانده و آن را در رشته ی Name قرار می دهد.در خط ۱۰ با استفاده از شی ObjectP2 که در درس قبل در مورد آن توضیح دادیم متد Message را فراخوانی کردیم.تفاوتی که در اینجا وجود دارد این است که در هنگام احضار متد باید مقداری را به عنوان آرگومان به آن ارسال کنید.آرگومان ارسالی در اینجا رشته ی Name است.دقت داشته باشید نوع آرگومان ارسالی و پارامتر تعریف شده برای متد در هنگام اعلان آن باید سازگار باشد و نیازی به هم نام بودن این دو نیست.هنگامی که آرگومان Name به متد ارسال می شود، متد، آن را در جای پارامتر Name خود قرار داده و چاپ می کند. حال می خواهیم برنامه را به گونه ای دیگر بنویسیم به طوری که دارای خاصیت باشد. در ابتدا بیایید با تغیر های نمونه و خصوصیات بیشتر آشنا شویم.متغیر هایی که در بدنه ی یک متد خاص اعلان می شوند را متغیر های محلی می نامند که فقط در همان متد قابل استفاده اند و متد های دیگر به آن ها دسترسی ندارند.هر شی از کلاس دارای صفاتی است که همواره با متد همراه خواهد بود.در اعلان کلاس، صفات به صورت متغیر هایی نشان داده می شوند که آن ها را فیلد می نامند و در داخل کلاس و خارج بدنه ی متد اعلان می شوند.به فیلدی که نمایانگر یک صفت است متغیر نمونه گفته می شود.هر کلاس دارای یک یا چند خاصیت است که صفات یک شی را دستکاری می کنند. یک پروژه جدید باز کنید و کد های زیر را در آن وارد نمایید: ۱٫ using System; ۲٫ ۳٫ public class P3 ۴٫ { ۵٫ private string name; ۶٫ ۷٫ public string Name ۸٫ { ۹٫ get { ۱۰٫ return name; ۱٫ } ۱۲٫ set ۱۳٫ { ۱۴٫ name = value; ۱۵٫ } ۱۶٫ } ۱۷٫ ۱۸٫ public void Message() ۱۹٫ { ۲۰٫ Console.WriteLine(“Your Name is {0}”, Name); ۲۱٫ } ۲۲٫ } خط ۵ برای اعلان یک متغیر نمونه با نام name نوشته شده است و خطوط ۷ تا ۱۶ برای اعلان خاصیت Name است که این خاصیت می تواند متغیر نمونه را دستکاری کند.متغیر نمونه دارای سطح دسترسی private می باشد.بهتر است که متغیر های نمونه را با این سطح اعلان کنید تا سایر کلاس ها و متد ها به آن دسترسی نداشته باشند و از تغییر اتفاقی در آن جلوگیری شود.این کار را پنهان سازی اطلاعات می گویند در بدنه ی اعلان خاصیت از دو دستور get و set استفاده شده است.دستور get می تواند مقدار موجود در متغیر نمونه را بخواند و با دستور return آن را برگرداند.دستور set مقدار جدیدی را به متغیر نمونه نسبت می دهد.اگر ObjectP3 یک شی از این کلاس باشد عبارت ObjectP3.Name بیان کننده ی خاصیت Name است. string A = ObjectP3.Name مقدار موجود در متغیر نمونه ی name را در متغیر A قرار می دهد که معادل دستور get است و ObjectP3.Name = B مقدار موجود در متغیر B را در متغیر نمونه ی name قرار می دهد که معادل دستور set می باشد. متدی که در خط ۱۸ اعلان شده است دارای پارامتر ورودی نیست و رشته ی مورد نیاز خود را از طریق خاصیت کلاس به دست می آورد.فایل جدیدی با نام P3Test بسازید و کد های زیر را در آن وارد کنید: ۱٫ using System; ۲٫ ۳٫ public class P3Test ۴٫ { ۵٫ public static void Main(string[] args) ۶٫ { ۷٫ P3 ObjectP3 = new P3(); ۸٫ Console.Write(“Enter Your Name: “); ۹٫ ObjectP3.Name=Console.ReadLine(); ۱۰٫ ObjectP3.Message(); ۱۱٫ Console.ReadKey(); ۱۲٫ } ۱۳٫ } تنها خط کد جدیدی که در این جا مشاهده می کنید خط ۹ است که در آن با استفاده از خاصیت Name شی ObjectP3 رشته ای را به متغیر نمونه ی name انتساب داده است. << درس چهارم لیست دروس پروژه اول >>
آموزش سی شارپ – پروژه سوم ----------------- آموزش سی شارپ – پروژه سوم فرض کنید فروشنده ای از شما به عنوان یک برنامه نویس خواسته که برای مغازه ی وی یک برنامه ی حسابداری ساده بنویسید.هر یک از اجناس آن مغازه دارای یک کد کالا می باشد.برنامه باید به گونه ای نوشته شود که کد کالا، قیمت واحد آن کالا و تعداد قطعات فروش رفته ی آن کالا را دریافت کند و سپس هزینه ای که خریدار باید بپردازد را به صورت یک فاکتور محاسبه و چاپ نماید. کد های این برنامه را به صورت زیر می توانید بنویسید: ابتدا فایل Program.cs را به P3.cs تغییر نام دهید و سپس کد های زیر را در آن وارد کنید. ۱٫ using System; ۲٫ ۳٫ public class P3 ۴٫ { ۵٫ private string name; ۶٫ private int code; ۷٫ private int num; ۸٫ private decimal val; ۹٫ ۱۰٫ public string Name ۱۱٫ { ۱۲٫ get ۱۳٫ { ۱۴٫ return name; ۱۵٫ } ۱۶٫ set ۱۷٫ { ۱۸٫ name = value; ۱۹٫ } ۲۰٫ } ۲۱٫ public int Code ۲۲٫ { ۲۳٫ get ۲۴٫ { ۲۵٫ return code; ۲۶٫ } ۲۷٫ set ۲۸٫ { ۲۹٫ code = value; ۳۰٫ } ۳۱٫ } ۳۲٫ public int Num ۳۳٫ { ۳۴٫ get ۳۵٫ { ۳۶٫ return num; ۳۷٫ } ۳۸٫ set ۳۹٫ { ۴۰٫ num = value; ۴۱٫ } ۴۲٫ } ۴۳٫ public decimal Val ۴۴٫ { ۴۵٫ get ۴۶٫ { ۴۷٫ return val; ۴۸٫ } ۴۹٫ set ۵۰٫ { ۵۱٫ val = value; ۵۲٫ } ۵۳٫ } ۵۴٫ public P3(string name, int code, int num, decimal val) ۵۵٫ { ۵۶٫ Name = name; ۵۷٫ Code = code; ۵۸٫ Num = num; ۵۹٫ Val = val; ۶۰٫ } ۶۱٫ public void Bill() ۶۲٫ { ۶۳٫ decimal Price; ۶۴٫ Price = Num * Val; ۶۵٫ Console.WriteLine(); ۶۶٫ Console.WriteLine(“The bill of customer ‘{0}’ is:\nCode {1}\nNumber {2}\nPrice is: {3}”, Name, Code, Num, Price); ۶۷٫ } ۶۸٫ } خطوط ۵ تا ۸ چهار متغیر نمونه را تعریف می کنند.خطوط ۱۰ تا ۵۳ چهار خاصیت را برای چهار متغیر نمونه می سازد.هر کدام از این چهار خاصیت دارای دستور های get و set هستند که آن ها را در بخش قبل بررسی کردیم.خط ۵۴ تا ۶۰ ساختار کلاس می باشد که از آن برای مقدار دهی اولیه ی چهار خاصیت استفاده شده است.این ساختار دارای چهار پارامتر ورودی به ازای هر کدام از خاصیت ها می باشد و این پارامتر های ورودی را در مقدار خاصیت ها قرار می دهد. خط ۶۱ کد شروع کننده ی متد Bill() می باشد.این متد در بدنه ی خود ابتدا تعداد فروش را در قیمت واحد آن کالا ضرب کرده و حاصل ضرب را در متغیر Price که از نوع decimal تعریف شده است قرار می دهدو سپس در خط ۶۶ فاکتور را چاپ می کند. متغیر decimal برای نگه داری اعداد اعشاری به کار گرفته می شود.در مورد این نوع داده و دو نوع دیگر که ان ها نیز برای اعداد اعشاری به کار می روند در بخش های بعدی آموزش مطالبی خواهید آموخت. حال یک فایل جدید به نام P3Test بسازید و کد های زیر را در آن وارد کنید: ۱٫ using System; ۲٫ ۳٫ public class P3Test ۴٫ { ۵٫ public static void Main(string[] args) ۶٫ { ۷٫ string name; ۸٫ int code; ۹٫ int num; ۱۰٫ decimal val; ۱۱٫ ۱۲٫ Console.Write(“Enter the name of customer: “); ۱۳٫ name = Console.ReadLine(); ۱۴٫ ۱۵٫ Console.Write(“Enter code: “); ۱۶٫ code = Convert.ToInt32(Console.ReadLine()); ۱۷٫ ۱۸٫ Console.Write(“Enter number: “); ۱۹٫ num = Convert.ToInt32(Console.ReadLine()); ۲۰٫ ۲۱٫ Console.Write(“Enter the price of one: “); ۲۲٫ val = Convert.ToDecimal(Console.ReadLine()); ۲۳٫ ۲۴٫ P3 ObjectP3 = new P3(name, code, num, val); ۲۵٫ ObjectP3.Bill(); ۲۶٫ ۲۷٫ Console.ReadKey(); ۲۸٫ } ۲۹٫ } در اینجا در بدنه ی متد Main() ابتدا چهار متغیر تعریف شده و سپس مقدار این چهار متغیر از کاربر گرفته شده است.توجه کنید چون عددی که کاربر وارد می کند به صورت رشته است و می خواهیم که این اعداد را در متغیر هایی از نوع داده ی int و decimal وارد کنیم ابتدا باید آن ها را تبدیل کنیم.برای این کار از متدهای Toint32 و ToDecimal از کلاس convert موجود در فضای نام system استفاده می شود. Convert.Toint32(parameter) پارامتر ورودی خود را که از نوع string است به نوع int تبدیل می کند. در ادامه در خط ۲۴ یک شی از کلاس P3 ساخته شده و در فراخوانی ساختار، چهار پارامتر مورد نیاز آن، برایش ارسال شده است تا با استفاده از آن ها متغیر های نمونه ی موجود در کلاس P3 مقدار دهی اولیه شوند.در خط ۲۵ متد Bill() احضار شده تا وظیفه ی خود را انجام دهد. هنگامی که یک خاصیت را تعریف می کنید اگر در بدنه ی آن خاصیت فقط و فقط دستور get و set را به گونه ای که در بالا می بینید وجود داشته باشد می توانید از خواص خود پیاده شونده استفاده کنید.در این صورت نیازی به تعریف متغیر نمونه نبوده و خاصیت را به صورت زیر می توان تعریف کرد: Public int Num{get; set; } ممکن است فردی که از برنامه استفاده می کند در هنگام وارد کردن اطلاعات اشتباهی انجام دهد مثلا در هنگام وارد کردن تعداد عددی منفی را وارد کند.شما در نوشتن برنامه خود باید این مسائل را کنترل کنید.کنترل کردن این خطاها را در ادامه ی اموزش و در قسمت ساختار های کنترلی خواهید آموخت. برای تمرین بیشتر کد های بالا را با استفاده از خواص خود پیاده شونده به طور خلاصه تر بنویسید.