بسم الله الرحمن الرحیم
سلام...
در این درس می خواهیم بصورت عملی یک "کلاس" در سی شارپ بسازیم و از آن در بر نامه خود استفاده کنیم. اما قبل از آن اجازه دهید تا کمی بیشتر با کلاس آشنایی پیدا کنیم. قصد ندارم در این مورد زیاد بحث کنم. اما هرگونه سوالی دارید رو مطرح بفرمایید. الساعه پاسخگو خواهم بود. ان شاءالله...
قبلا تا حدودی با "کلاس" و "شئ" آشنایی پیدا کردید. اما لازم هست که چند نکته رو در این مورد گوشزد کنم.
یکی از نکات مهمی که باید همیشه مد نظر داشته باشید این است که "کلاس" به تنهایی کاری برای ما انجام نمی دهد. همانطور که قبلا هم گفته بودم، کلاس مانند یک قالب و طرح کلی (به اصطلاح blueprint) است. همانطور که قالب یک آچار نمی تواند یک پیچ و مهره را باز کند، از کلاس هم کاری ساخته نیست. ما باید با استفاده از کلاس، یک شئ بسازیم، سپس آن شئ برایمان کارها را انجام خواهد داد.
باید توجه داشته باشید که کارهای مربوط به هم را با استفاده از کلاس ها دسته بندی کنید و به کلاس مربوطه، نام مناسبی اختصاص دهید.
خوب فعلا یک Class می سازیم و بعدا در مورد بقیه خصوصیات آن با هم به بحث می نشینیم.
- ویژوال استودیو را باز کرده و یک پروژه جدید بسازید.
- در بخش Solution Explorer روی نام پروژه راست کلیک کرده و از لیست Add ، گزینه Class را برگزینید.
- در پنجره باز شده، نامی مناسب برای Class انتخاب کرده و روی دکمه Add کلیک کنید.
تا اینجا یک کلاس جدید ساختیم. من اسم کلاس را Math گذاشتم. این کلاس جدید در بخش Solution Explorer قابل مشاهده هست. در ضمن بلافاصله بعد از کلیک کردن روی دکمه Add با کدی شبیه شکل زیر مواجه خواهید شد.
حالا که با موفقیت Class مورد نظرتون رو ساختید، وقتشه که ازش استفاده کنیم. اما این کلاس فعلا یک کلاس خالی و بی محتوا هست و طبیعتا هیچ کاری ازش ساخته نیست. بنابراین من یک تابع جدید داخل این کلاس می سازم تا هم مختصری در مورد نحوه ساختن توابع (متدها) آشنایی پیدا کنید و هم اینکه کلاس نوساخته ما از بی محتوایی در بیاد.
قصد دارم تابعی به این کلاس اضافه کنم که فاکتوریل یک عدد را محاسبه کرده و به خروجی ارسال نماید. پس کد زیر را در داخل اسکوپ class Math وارد می کنم. شما هم همین کار را انجام دهید.
public int factorial(int n) { int f = 1; for (int i = 2; i <= n; i++) { f = f * i; } return f; }
حالا سوال اصلی اینه که چطور از کلاسی که ساخته ایم استفاده کنیم. به ترتیب زیر عمل کنید:
- از قسمت Solution Explorer روی Form1.cs دابل کلیک کنید تا باز شود.
- کنترل های زیر را روی فرم قرار دهید:
- دو عدد TextBox به نام های txtInput و txtOutput .
- دو عدد Label برای مشخص کردن کار کنترل های TextBox .
- یک Button
- روی دکمه دابل کلیک کرده و کد زیر را برای دکمه بنویسید:
int input = Convert.ToInt32(txtInput.Text); Math myMathClass=new Math(); txtOutput.Text = myMathClass.factorial(input).ToString();
حالا برنامه را اجرا کنید.
باید اندکی در مورد نحوه تعریف متدها (از جمله همین متد factorial) توضیح بدهم. توابع یا متدها مانند یک کارخانه عمل مینمایند. یعنی با دریافت ورودی ها و انجام عملیاتی خاص روی آنها، خروجی خاصی را تولید می نمایند. در علم ریاضی با توابعی مثل sin ، cosine و... مواجه هستیم. این توابع زاوبه ای را به عنوان ورودی خود دریافت کرده، سپس با عبور این ورودی ها از فرمول های محاسباتی خاص، خروجی مورد نظر را تولید می کنند.
باید توجه داشته باشید که مجموعه نام و پارامترهای (در واقع آرگومان های) ورودی یک تابع در یک عبارت، با مقدار خروجی آن تابع جایگزین خواهد شد. برای مثال هر دو عبارت زیر با یکدیگر معادل هستند.
x= 2 + factorial(5); x= 2 + 120;
متدها در زبان سی شارپ چهار بخش مهم می باشند:
- نام متد که در این مثال factorial می باشد.
- نوع خروجی متد؛ که قبل از نام متد نوشته می شود. در اینجا int هست.
- لیست پارامترهای ورودی متد؛ که بعد از نام متد در داخل پرانتز قرار گرفته (اند). نوع و نام هر پارامتر ورودی را در اینجا می نویسیم. اگر چند پارامتر داشته باشیم، با علامت کاما (,) از یکدیگر جدا می کنیم.
- بدنه متد؛ که با یک علامت آکولاد باز، شروع شده و با علامت آکولاد بسته، به پایان می رسد.
- البته قبل از قسمت نوع خروجی، بخش اصلاحگرها وجود دارد که قلمرو تابع را مشخص میکند و فعلا باهاش کاری نداریم. در اینجا public .
int input = Convert.ToInt32(txtInput.Text); Math myMathClass=new Math(); txtOutput.Text = myMathClass.factorial(input).ToString();
اما توضیح این تکه کد اینکه:
در خط اول، یک متغیر نوع صحیح به نام input تعریف کردیم و آن را با مقدار عددی جعبه متن ورودی (txtInput) ، مقداردهی اولیه کرده ایم. توجه دارید که خصوصیت Text مربوط به هر TextBox بصورت رشته ای هست و باید به یک عدد واقعی تبدیل شود، تا بتوان آن را در داخل متغیر input ذخیره کرد. در ضمن نمی توانیم بر روی رشته ها، عملیات ریاضی انجام دهیم. پس باید به عدد تبدیل شوند.
در خط دوم، از کلاسی که ساخته بودیم، یک شئ نمونه، ساخته ایم. به این دلیل که کلاس، به تنهایی کاری نمی تواند انجام دهد. همانطور که ما نمی توانیم در نقشه یک خانه، زندگی کنیم. فعلا اجازه دهید وارد جزئیات بیشتری در مورد این خط از برنامه نشوم. فقط بدانید که این خط از برنامه یک شئ به نام myMathClass ، می سازد. از این پس ما با این شئ کار می کنیم.
در خط سوم، از متدی که پیش از این در کلاس Math ساخته بودیم استفاده کرده ایم. طبیعتا این متد در داخل شیئ myMathClass وجود دارد؛ چون این شئ بر اساس کلاس Math ساخته شده است. دقت کنید که برای دسترسی به متد factorial ، بعد از myMathClass یک نقطه قرار داده ایم. متغیر input را به عنوان ورودی به متد factorial داده ایم.
همینکه نام متد را بنویسیم، به معنای فراخوانی متد است، پس متد اجرا شده، و در آخر خروجی متد، با نام و پارامتر ورودی آن، جایگزین می شود. در ضمن چون خروجی این متد از نوع عددی می باشد، برای اینکه بتوانیم آن را در جعبه متن خروجی (txtOutput) به نمایش در آوریم، باید آن را (خروجی را) به رشته تبدیل کنیم، پس از ToString استفاده کردیم.
امیدوارم خیلی روده درازی نکرده باشم. فکر می کنم برای این درس تا همین جا کافی باشه. هر سوالی پیرامون مطالب دارید، لطفا بپرسید. باز هم از اینکه تاخیر طولانی مدتی داشتم عذر خواهی میکنم.
در پناه خدا باشید...