آموزش سیشارپ C# – بخش ۳۶
- · مقدمه
تا اینجای آموزش، همه کدهایی که نوشتیم، تنها ما بین دو براکت خاصی بودند. اما این روش برنامهنویسی، به هیچ وجه بهینه نیست و در هیچکجا قابل قبول نخواهد بود. برای شروع یادگیری، مجبور بودیم که چنین روشی را شروع کنیم، اما از این به بعد باید این روش کاملاً عوض شود.
هربار که ما تمامی کدهایمان را میان دو براکت پشتسرهم بنویسیم، کدها ناخواناتر خواهند شد و حتی برنامهنویس هم درآینده متوجه نخواهد شد که هر قسمت در حال انجام چه کاری است. در چنین حالتی، ما از چیزی استفاده خواهیم کرد به نام متد (Method).
- · معرفی متد (Method)
یک متد، یک بخشی از کد است که یک کار خاصی را انجام میدهد. ماشینحسابی را که پیشتر نوشتهایم را به یاد دارید؟ در آن برنامه ما میتوانستیم که بخشی از کدی را در یک متد بنویسیم که کار جمع انجام دهد؛ بخش دیگری را در متد دیگری مینوشتیم که متد تفریق را انجام دهد؛ و به همین ترتیب برای ضرب و تقسیم. در نهایت، هر کجا که به انجام عملیات فوق نیازی پیدا کردیم، کافیست که متد را صدا بزنیم!
پیش از آنکه کارمان را با متد آغاز کنیم، به این نکته توجه داشته باشید که متد در زبانهای دیگر همانند C++، با نام تابع (Function) شناخته میشود؛ اما مایکروسافت در زبان سیشارپ خود، آن را بهنام متد (Method) به دلایل خاص خودش تغییر نام داده است.
برای شروع کار با متدها، ما یک برنامه سادهای را استارت خواهیم زد؛ بدین نحو که دو شماره را از کاربر بوسیله text box میخواند. ما چهار button نیز خواهیم داشت که عملیات اصلی ریاضی (جمع، تفریق، ضرب و تقسیم) را انجام میدهد. اما این بار این عملیات را با استفاده از متدها انجام خواهیم داد.
پروژهی جدیدی را در Visual Studio آغاز کنید و فرم خود را به شکل زیر طراحی کنید:
هنگامی که Text Box و Button ها را اضافه کردید، لازم نیست که مشخصه Name آنها را تغییر دهید؛ همانهایی که هستند رها کنید (button1، button2، …(
بر روی button با نام Add Up دوبار کلیک کنید تا پنجره کدنویسی برای شما باز شود. نشانگر جایی که باید تایپ کنید مابین دو براکت مربوط به button با نام Add Up است. ما کاری به داخل براکت نخواهیم داشت؛ لذا این نشانگر را به براکت بسته انتقال دهید و پس از وارد خط جدید شوید و کد زیر را بنویسید:
void AddUp()
{
MessageBox.Show(“Add Up Here”);
return;
}
کد شما به شکل زیر درخواهد آمد:
متدها میتوانند مقداری را برگردانند (اصطلاحاً مقداری را return کنند)؛ مثلاً جواب جمع دو عدد، اما هیچ لزومی ندارند که حتماً مقداری را برگردانند. متدی که ما نوشتیم، یک MessageBox را نشان میدهد که تنها زمانی اجرا میشود که ما آن را صدا بزنیم.
وقتی که شما از متد خود میخواهید که هیچ مقداری را برنگرداند (مثل متد ما)، کافیست قبل از نام متد، کلمه کلیدی Void را قرار دهید. بعد از یک فاصله (Space)، نام تابع را مینویسید و پس از دو پرانتز باز و بسته، دو براکت باز و بسته قرار میدهید و کدهای مورد نظر خودتان را مابین آن مینویسید. انتخاب نام متد نیز همانند انتخاب نام متغیر کاملاً دلبهخواه است و میتواند هر نامی باشد. مثلاً ما در اینجا نام متد خود را AddUp انتخاب کردیم.
در انتهای متد خود، قبل از آنکه براکت بسته شود، کلمهی کلیدیای با نام Return نوشتهایم و در انتهای آن یک Semicolon قرار دادهایم. وقتی که ما متد خود را به شکل void تعریف کردهایم، لزومی بر قرار دادن کلمه کلیدی return نیست، چونکه شما نمیخواهید مقداری را return کنید (برگردانید.) شما فقط این تابع را نوشتید که کار خاصی را انجام دهد و نیازی به مقداری ندارید. ما تنها این کلمه کلیدی return را قرار دادهایم چونکه یک استاندارد در هنگام نوشتن یک متد است.
هنگامی که C# کلمه return را در متدی ببینید (به آن برسد،) از متد خارج میشود و ادامه کدهای موجود در بخش اصلی را انجام میدهد.
متد AddUp که ما نوشتیم، فعلاً هیچ کاری را نمیکنید، چونکه آن را صدا نزدیم. ما میخواهیم که این متد کار خود را زمانی آغاز کند، وقتی که ما بر روی button با نام Add Up کلیک کردهایم. پس برای صدا زدن یک متد، اینگونه مینویسیم:
AddUp();
پس برای صدا زدن این متد در هنگام کلیک بر روی Button با نام AddUp، کد شما باید به شکل زیر باشد:
برنامه خود را یک بار اجرا کنید؛ خواهید دید که زمانی که بر روی Add Up کلیک میکنید، یک MessageBox برای شما ظاهر میشود.
حال میدانید که چه اتفاقی میافتد؟ شما وقتی که بر روی Add Up کلیک میکنید، سیشارپ به سراغ کدهای ما بین مربوط به button1 میرود. در آنجا با متدی با نام AddUp ملاقات میکند. وقتی که میبیند که AddUp از نوع متد است (چون پرانتز باز و بسته دارد)، متوجه میشود که این متد باید جایی در کدهای ما تعریف شده باشد؛ لذا شروع به جستجو میکند تا میبیند که AddUp در زیر تعریف شده است. درنتیجه وارد تعریف داخل متد میشود و کارهای خواسته شده را انجام میدهد و مجدداً به برنامه باز میگردد.
در بخش بعدی، با امکانات بیشتری از متدها آشنا خواهید شد.
سلام ممنون بسیار عالی بود آقای موسوی . یک سوال آیا در آینده امکان آموزش ساخت یک برنامه همراه با دیتابیس هم آموزش میدید با نه ؟
سلام دوست عزیز،
قطعاً یاد میدم. احتمالاً هم با Access و هم با SQL Server.
موفق باشید!
سلام دوست عزیز
با خرید کارت شارژ از سایت timeup.ir کودکان مبتلا به سرطان محک را حمایت کنید
درود اقای Jeff Mosawy عزیز ، خدا قوت ، بسیار بسیار لطف می کنی اموزش زبان بسیارخوب #C برای ما کاربران قرار میدی،
باور نمی کنید به خاطر این اموزشتون رفتم نرم افزار VS.net رو خریدم از اموزشهایی که لطف می کنید قرار میدید استفاده کنم چون برنامه نویسی دوست دارم.
اقای موسوی محبت کنید ، لطف کنید اموزش تون ادامه بدید واقعا خیلی لذت می برم.
خواهش می کنم این روند خوب و عالی که برای اموزش زبان برنامه نویسی در پیش گرفتید رو ادامه بدید.
ممنون و موفق باشید.
سلام دوست عزیز،
خوشحالم که راضی هستید. قطعاً اگر عمری برای ما باقی بماند، حتماًحتماً این آموزشها رو ادامه میدم.
موفق باشید!
سید سلام یه سوال داشتم سوالم اینه که ما بعد خواندن تمام آموزش های شما حدود همان 100 تا میتونیم یه برنامه نویس حرفه ای بشیم یعنی منظورم اینه که خودمون هر چه می خواهیم بنویسیم یا این که هنوز خیلی راه داره خواهشن جواب بده سید جان.
سلام؛
شما اصول کار رو یاد بگیرید، میتونید یک برنامه نویس حرفهای بشید؛ اصول هم تقریباً همین چیزهایی هست که الان دارم مینویسم هست. فقط یک مبحث شیءگرایی میماند که کل سیشارپ در همین خلاصه میشود که انشاءالله اگر وقتی شد، حتماً ادامه آموزشها مینویسم.
از این جهت خیال شما راحت باشه.
موفق باشید!
تشکر
سلام آقای موسوی، ممنون از آموزش خیلی خوبتون. شما لینک دانلود کتاب ‘C# 5 All-in-One for Dummies’ رو دارین؟ اصلا یک کتاب خیلی خوب انگلیسی C# 5 همراه با لینک دانلود معرفی کنین لطفا. (از پایه تا پیشرفته تو کتابش باشه)
سلام دوست عزیزم،
من سراغ این کتاب رو تا الان نگرفتم؛ اما حتی اگر داشته باشم هم بدلیل اینکه حقوق نویسنده این کتاب و ناشر ضایع میشود، قطعاً منتشر نمیکردم.
من خودم سیشارپ رو از کتابهای انتشارات O’Reilly و یکی از استادان خوبم فرا گرفتم.
موفق باشید!
منظور شما کتب ترجمه شدست؟
کدوم کتاب O’Reily مد نظر شماست؟ لطفا یه نمونه بگین.
سلام دوست عزیزم،
خیر؛ خود کتاب زبان اصلی مد نظرم بود. کتابهای O’reilly همه برای مطالعه خوب هستند! هرکدام که مد نظرتان هست، میتوانید مطالعه کنید؛ قطعاً استفاده خواهید کرد!
موفق باشید!
سلام آقای موسوی
میشه یه منبع معرفی کنید که از سطح مبتدی شروع کرده باشه برای آموزش ورد و پاورپینت 2007
سلام دوست عزیزم،
منبعی که من برای آموزش سیشارپ در حال استفاده هستم، دو گزینه مورد نظر شما را از مبتدی آموزش میدهد؛ میتوانید به سایت زیر مراجعه بفرمایید:
سلام آقای موسوی
ببخشید می خواستم بدونم که بخش جدید آموزش سی شارپ رو کی توی سایت قرار می دید؟
باتشکر
سلام دوست عزیزم،
من از شما و بقیه دوستان معذرت میخوام. انشاءالله امروز شروع میکنم و حداکثر تا فردا (درصورت تأیید مدیریت کل سایت) منتشر خواهد شد.
موفق باشید!
اگه قرار باشه با این سرعت پیش بری احتمالا تا انتهای آموزش موهای همه ما سفید بشه
بازم تشکر
به نظر بنده آموزش هارو ازینجا پیگیری کنی خیلی بهتره: http://homeandlearn.co.uk/csharp/csharp.html
اگه بازم می خوای ادامه بدی کتاب C# 2010 All-in-One for Dummies به نظر من خوبه، تو سایت حاج آقا O’Reily بود.
اینکه گفتی موهای هممون سفید می شه واقعا اشتباه بود چون احتمالا بعضی ها موهاشونو رنگ می کنن.
سلام دوست عزیزم،
لطف کنید که به دوستمون احترام بزارید. ایشون متأسفانه تصور کردند که این کامنت از جانب من بود.
موفق باشید!
متاسفم، فکر نمی کردم اینجوری بشه…
سلام دوست عزیزم،
همانطور که دارید مشاهده میکنید، کامنت مربوط به جواب شما، از جانب من نبود؛ لطفاً به اسامی دقت کنید!
موفق باشید!
با سلام خدمت آقای سیدجعفرموسوی سوالی داشتم میخواستم اگه ممکنه من رو راهنمایی کنید.
راستش من برنامه نویس در سطح مقدماتی در ویژوال بیسیک ۶ هستم. بعد از اینکه نسخه ۲۰۱۲ این نرم افزار اومد اون رو تهیه کردم و سعی کردم دانسته های قبلیم رو با این نسخه جدید تطبیق بدم و این کار رو تا حدودی انجام دادم. اما وقتی کار تطبیقم تمام شد متوجه شدم که هیچ منبع فارسی برای آموزش این نسخه نیست و اگه سعی میکردم بازم کار تطبیق رو ادامه بدم, معلوم نبود چقدر موفق میشدم. حتی خوده سایت مایکروسافت هم آموزشهای چندان جالبی برای این نسخه (از نظر من) نگذاشته بود به همین دلیل تصمیم گرفتم که یک زبان رو که منابع آموزشیش فراون هست مثل سی شارپ و سی پلاس پلاس رو برای یادگرفتن شروع کنم. منتهی وقتی در مورد سی شارپ تحقیق کردم , دیدم یه عده از کاربرهای سی شارپ گفتن هر کاری با سی شارپ انجام بدی با ویژوال بیسیک هم میشه انجام داد. خوب اگه واقعا اینطور باشه دیگه یادگیری سی شارپ با پیچیدگیش چه فایده ای داره؟
در مورد سی پلاس پلاس هم تحقیق کردم به عنوان یک زبان سطح میانی شناختمش که توانایی های خیلی خوبی براش ذکر شد از جمله اینکه برخلاف سی شارپ و ویژوال بیسیک مستقیم به زبان ماشین تبدیل میشه پس سرعتش خیلی در اجرا بالاتره. اما خوب نبود یک IDE مناسب براش که با جزوه های آموزشی تطبیق داشته باشه کار رو سخت میکنه.البته زبانی هست که چون همه چیزش رو باید برنامه نویس بنویسه, اساس برنامه نویسی رو به ادم یاد میده.
حالا با توضیحاتی که دادم لطفا اگه اطلاعاتی دارید, خوشحال میشم من رو راهنمایی کنید.
(اینکه میگن سی شارپ توانایی هاش فرقی با ویژوال بیسیک نمیکنه اعصابم خورد میکنه و من رو از یادگرفتن سی شارپ منصرف میکنه!)
منم بیسیک 6 یاد دارم تا حدودی ولی C# رو دنبال کن به این دلایل:
– وب فارسی و برنامه نویس های ایرانی سی شارپ رو خیلی بهتر ساپورت می کنن
– همکاری با برنامه نویس های دیگه تو ایران با سی شارپ راحت تره چون اونام سی شارپ کار می کنن، مخصوصا حرفه ای هاش. (من خودم بیسیک کار خفن ندیدم راستش، البت شاید باشه)
– اگه سی شارپ یاد داشته باشی، سی، سی پلاس پلاس، جاوا و بعضی زبان های دیگه رو هم یاد گرفتی. (مثلا گیم میکر که می تونی باش دو سوت بازی بسازی (من خودم گیم میکر رو خفن کار کردم(کلا سی خیلی جاهای دیگه به کارت میاد(چه پرانتز تو پرانتزی شد))))
– جاوا و پلاس پلاس خودشون غولین واسه خودشون و یاد داشتن اونا وحشتناک خفنت می کنه (اندروید، iOS، vhdl،…)
– سی شارپ تیریپ بهتری داره واست، مثلا بگی سی شارپ بلدم خیلی خوفتری تا اینکه بگی بیسیک بلدم.
– اگه بیسیک یاد داری، یادگیری سی شارپ واقعا راحته.
– مهمترین دلیلش اینکه من جون کندم تا این جوابو بنویسم. (تایپ فارسیم در حد گشنگان سومالیه) (شوخی کردم قابل شما رو نداره)
اینم ای میلم: Sadodah@msn.com
ای میل msn دیده بودی تا حالا؟ واقعا عجیبه این دنیا.
سلام دوست عزیزم،
خوب قطعاً به طول معمول شما هر کاری رو که با هر زبانی میتونید انجام بدید، با زبانهای دیگه هم میتونید پیادهسازی کنید! اما مسئله اینجا هست که کدام یک قدرتمندتر هستند و موقع کدنویسی احساس بهتری به برنامه نویس میده؟
درضمن، قدرتهایی که زبان سیشارپ داره و امکاناتی رو که به شما در طراحی شیگرا میده، تا جایی که من میدونم بیسیک اصلاً نمیتونه در مقابلش دوام بیاره.
درضمن، برای اینکه با زبان C++ کار کنید، میتونید از خود IDE مربوط به مایکروسافت که Visual Studio باشه کار کنید. Visual C++ تقریباً با C++ یکی هست و مشکلی نداره!
سوالی بود من در خدمت شما هستم
موفق باشید!
سلام می شه لطفا اموزش را ادامه بدهید مرسی
سلام دوست عزیزم،
چشم حتماً حتماً بخش بعدی رو از همین الان شروع به آمادهسازیش میکنم. احتمالاً فردا منتشر میشه!
موفق باشید!
من عبارت موی سفید، با کنایه از اینکه آموزش ها خیلی طولانی شده عرض کردم.البته شما خودت متوجه منظور من شدی حالا اینکه چرا اینو گفتی نمی دونم :
Jeff Mosawy ” اینکه گفتی موهای هممون سفید می شه واقعا اشتباه بود ”
به نظر خودت طولانی نشده ؟ این قول شما تو بخش نظرات نبود ؟ :
Jeff Mosawy ” اما انشاءالله طبق قولی که پیشتر دادم، همین که فصل امتحان بنده به پایان برسد، با سرعت بالاتری آموزش ها را قرار خواهم داد؛ هم به نفع کسانی که دوست دارند در طول یک هفته مطالب بیشتری یاد بگیرند می شود، هم شما که دوست دارید که سریع تر از موارد جزئی جدا شوید و مطالب اصلی را دنبال کنید ”
قبلا هفته 2 جلسه یا هفته ای 1 جلسه بود ( معنی سرعتم فهمیدیم )
البته همیشه حرف زدن ساده است، مهم عمل کردنه
البته من طلب کار نیستما ، این آموزش ها به طور رایگان برای همه قرار داده شده، اینو خودم میدونم ، ولی وقتی زیر قول خودت میزنی با ادبانه رفتار کردن اینه که بیایی اشتباهتو قبول کنی ، نه اینکه بیایی به خاطر اینکه خودتو آروم کنی تیکه بندازی بگی :
Jeff Mosawy ” احتمالا بعضی ها موهاشونو رنگ می کنن ”
بنده بهترین کتاب ها را پیدا کردم تا چند روز دیگه هم خریداری میکنم اشتباه من این بوده که وقت خودمو اثیر قول های شما کردم.
خدا نگهدار
سلام دوست عزیزم،
درک میکنم که چقدر سخت هست که شما دوست داری این زبان رو یاد بگیری و بخاطر بدقولیهای من داره کارهای شما عقب میوفته، اما آیا از وضعیت من اطلاع داری؟ من دارم خدمت سربازی خودم رو میگذرونم + پروژههایی که از بقیه دریافت کردم و قول انجام اونها رو دادم؛ لطفاً همه تقصیر را گردن من نندازید.
نمیگم مقصر نیستم، چونکه نباید قولهای زیادی میدادم، اما سربازی رفتن من هم اتفاقی و غیرمنتظره بود!
به هر حال، بزرگترین تقصیر سمت من برمیگرده؛ امیدوارم که از صمیم قلب منو ببخشید.
منم برای شما آرزو میکنم که به هرچیزی که دوست دارید برسید.
موفق باشید.
درضمن دوست عزیزم،
اون کامنتهایی که تیکه انداخته شده، از جانب من نبود؛ اسم کسی که کامنت گذاشته رو دقت کن، اسمش ۱۱۰ هست!
من اصلاً توی این چند روز حتی کامنتها رو بررسی هم نکردم! لطفاً تهمت به بنده نزنید. من هیچ وقت به هیچ کسی توهین نکردم و تیکهای ننداختم!
بازم عذر می خوام، نمی دونم چرا دوستمون به اسم توجه نکردن…
سلام آقای موسوی
واقعاً خسته نباشید
کاملاً مشخصه چقدر زمان گذاشتید که این آموزش رو رایگان برای ما گذاشتید
من چندین بار خواستم #c یاد بگیرم ، کتاب گرفتم ، سی دی آموزشی و … ، اما فکر نمیکنم هیچکدوم اندازه این آموزش شما تاثیرگذار بوده باشه ، احساس میکنم با این آموزش خیلی بیشتر یادگرفتم ،
واقعاً ازت ممنونم ،
من یک هفته است که دارم آموزشهای شما رو میخونم ، الان به این بخش رسیدم ، و دارم برات کامنت میزارم ، باز هم تشکر میکنم و خدا قوت میگم ، واقعاً چیز دیگه ای ازمون برنمیاد
تشکر تشکر
سلام دوست عزیزم،
خوشحالم که آموزشهایی که اینجا قرار دادم مورد توجه شما قرار گرفته است. متأسفانه هفتههایی رو مشغول بودم که نتونستم بخشهای بعدی رو قرار بدم. انشاءالله از فردا مجدداًقرار دادن بخشهای بعدی را آغاز خواهم کرد.
موفق باشید!