مشخصات مقاله
-
2126
-
0.0
-
8835
-
0
-
0
شروع کار با C#
کلیه حقوق مادی و معنوی این مقاله متعلق به آموزشگاه تحلیل داده می باشد و هر گونه استفاده غیر قانونی از آن پیگرد قانونی دارد.
شروع کار با C#
این مبحث با معرفی چند برنامه ی بسیار ساده نحوه ی شروع کار با برنامه ی C# را به شما آموزش می دهد. اهداف این درس به شرح زیر است.
ساختار پایه ی زبان برنامه نویسی C# را فرابگیرید.
فهم ساده ای از "namespace" و کاربرد آن به دست آورید.
آشنایی پایه ای از "class" و کاربرد آن به دست آورید.
با کاربرد متد اصلی (main method) آشنا شوید.
نحوه ی به دست آوردن ورودی خط-فرمان (command-line input) را یاد بگیرید.
مبانی ورودی و خروجی کنسول (console input/output (I/O)) را فرا بگیرید.
یک برنامه ی ساده ی C#
عناصر پایه ای وجود دارد که تمامی برنامه های قابل اجرای C# در آن شریک هستند، ما در این بخش به همان عناصر مذکور می پردازیم. ابتدا کار خود را با یک برنامه ی ساده C# آغاز می کنیم. پس از بررسی کُدهای لیست اِسمبلی listing 1-1، تمام مفاهیم پایه برنامه ی C# که در سرتاسر این دوره ی آموزشی به کار گرفته می شود را تشریح خواهیم کرد. لطفاً برای مشاهده ی اولین برنامه به listing 1-1 مراجعه کنید.
Listing 1-1. یک برنامه ی ساده ی خوشامد گویی : welcome.cs
// Namespace Declaration using System; // Program start class class WelcomeCSS { // Main begins program execution. static void Main() { // Write to console Console. WriteLine("Welcome to the C# Station tahlildadeh!"); } }
برنامه ی واقع در Listing 1-1، چهار عنصر اصلی دارد، یک معرفی فضای اسمی (namespace declaration)، یک کلاس (class)، یک متد اصلی (main method) و یک دستور برنامه (program statement). می توان آن را با خط فرمان زیر ترجمه (compile) کرد.
csc.exe Welcome.cs
این پروسه فایلی به نام Welcome.exe، به وجود می آورد که قابل اجرا است. به طور مشابه می توان برنامه های دیگر را با جایگزینی اسم فایل (file name) به جای Welcome.cs نیز به اجرا درآورد. برای دریافت کمک بیشتر می توانید "csc -help" را در خط فرمان وارد کنید. اسم فایل و اسم کلاس ممکن است از هم به طور کامل متفاوت باشند.
قابل توجه کاربران VS. NET
هنگامی که این برنامه را از Visual Studio. NET اجرا می کنید، صفحه می آید (اجرا می شود) و سپس به سرعت بسته می شود. برای جلوگیری از این اتفاق، کُد پایین را به عنوان خط آخر در متد اصلی (main method) وارد کنید.
// keep screen from going away // when run from VS. NET Console.ReadLine();
توجه
خط فرمان پنجره ای است که به شما اجزا می دهد با وارد کردن متن به صورت دستی، از آن برای اجرای برنامه و دستور استفاده کنید. به طور معمول از آن به عنوان DOS prompt یاد می شود و کاربرها سال ها پیش و قبل از ویندوز از آن استفاده می کردند. برنامه ی رایگان .NET Framework SDK بیشتر از ابزارهای خط فرمان بهره می گیرد. بنابراین، این راهنمای آموزشی طوری طراحی شده که همه بتوانند از آن استفاده کنند. در مرورگر ویندوز به دنبال "csc.exe"، که همان مترجم (compiler) C# بگردید. پس از یافتن محل قرار گیری، مکان یافت شده را به مسیر ویندوز(windows path) اضافه کنید. سپس پنجره ی فرمان را با مراجعه به فهرست شروع (windows start menu)، انتخاب run و تایپ cmd.exe اجرا کنید.
اولین چیزی که باید در نظر داشته باشید این است که C# به کوچک یا بزرگی حروف حساس (case-sensitive) است. واژه ی "MAIN" با "main" که با حروف کوچک نوشته شده یکی نیست. این دو شناسه گرهای کاملاً متفاوتی هستند. اگر شما قبلاً با زبانی کار کرده باشید که نسبت به کوچک بزرگی حروف بی تفاوت است (case-insensitive)، قطعاً اشتباه زیاد رخ می دهد و طول می کشد تا شما به این برنامه و خصوصیات جدید آن عادت کنید.
معرفی فضای اسمی (namespace declaration)
using System;، به ارجاع (دادن) شما به فضای نامی system اشاره دارد (به این حقیقت اشاره دارد که شما دارید به فضای اسمی سیستم reference می دهید). فضاهای نامی در واقع شامل گروهی کد هستند که می توان به وسیله ی برنامه ی C# آن ها را فراخواند. با معرفی (declaration) using System;، شما به برنامه ی خود اطلاع می دهید که اجازه دارد به کدِ فضای اسمی system ارجاع دهد بدون این که نیاز داشته باشد کلمه ی system به هر ارجاع (reference) ضمیمه کند . در درس 6 بیش تر به این موضوع خواهیم پرداخت.
معرفی کلاس (class definition)
class WelcomeCSS، شامل تعریف اطلاعات و متدها definition method و data است که برنامه ی شما برای اجرا (execute) از آن استفاده می کند. کلاس تنها یک نوع از انواع گوناگون عنصرها است که برنامه با استفاده از آن، شی (object) هایی همانند structs، enums، delegates وinterface را تعریف می کند. در درس 12 به این مفاهیم با جزئیات بیشتر خواهیم پرداخت. گرچه کلاس مذکور هیچ اطلاعاتی دربر ندارد، حداقل دارای یک متد است. این متد در واقع رفتار کلاس را تعریف می کند (و اینکه وظیفه اش چیست، قادر به انجام چه کارهایی است). البته در درس 7 درباره ی کلاس ها و کاربردشان بیشتر صحبت خواهیم کرد.
در حقیقت متد در کلاس WelcomeCSS وظیفه و عملکرد کلاس به هنگام اجرا را تعیین می کند. اسم متد، main، تنها برای نقطه ی شروع برنامه به کار می رود. اغلب از main به عنوان نقطه ی ورودی "entry point" یاد می شود و هر زمان که شما با پیغام خطای مترجم (compiler) مواجه شدید که می گوید قادر به یافتن entry point نیست، یقین بدانید که شما سعی کردید برنامه ی قابل اجرا را بدون متد main ترجمه یا compile کنید.
تعریف کننده ایستا، static modifier پیش از واژه ی main قرار می گیرد، به این معنا که تعریف کننده تنها در این کلاس کار می کند و به طور قطع مثالی از این کلاس نیست. این امر از آن جایی حائز اهمیت است که هنگام شروع یک برنامه هیچ گونه نمونه شی ای (object instance) وجود ندارد.
تمام متدها باید یک نوع بازگشتی (return type) داشته باشند که دراین مورد void (تهی) است، زیرا هیچ مقداری بازگردانده نمی شود. تمام متدها همچنین یک فهرست پارامتر دارند که به دنبال اسم آن به تعداد صفر یا هر تعداد لازم بین پرانتزهای جلوی نام آن می آیند. برای سهولت امر، ما هیچ پارامتری به main اضافه نکردیم.
متد اصلی (main method) به کمک دستور Console.WriteLine(. . . ) رفتارش را تعریف می کند. console یک class در فضای اسمی systemمحسوب می شود. WriteLine(. . . )هم در console class (کلاس کنسول) یک متد محسوب می شود. برای جدا کردن عنصرهای وابسته ی برنامه از عملگر (operator) نقطه (dot)"." استفاده می شود. توجه داشته باشید که دستور ذکر شده را می تونستیم به این صورت نیز بنویسیم : System. Console. WriteLine(. . . ) . این مثال از الگوی "namespace. class. method" که دستوری به طور کامل صحیح و معتبر است پیروی می کند. چناچه معرفی using System را از ابتدای برنامه حذف کرده بودیم، آن وقت مجبور می شدیم که از فُرم به طور کامل معتبر System. Console. WriteLine(. . . ) استفاده کنیم. این دستور است که باعث می شود رشته ی "Welcome to the C# Station Tutorial!" روی صحفه ی نمایش کنسول پدیدار شود.
در نظر داشته باشید که تمام توضیحات (comment) با "//". نشانه گذاری می شوند. این توضیحات در زمره ی single-line comment (توضیحات تک خطی) قرار می گیرند به این معنا که تا پایان خط معتبر هستند. چناچه میل داشتید چند خط را در محدودی تنها یک توضیح جای دهید، می توانید آن را با "/*" آغاز کرده و با علامت "*/" خاتمه دهید. هر چه بین این دو قرار گیرد بخشی از comment محسوب می شود. برنامه ی شما حین ترجمه توضیحات را نادیده می گیرد. تمام فعالیت هایی که برنامه شما انجام می دهد را به زبان انگلیسی ساده ثبت می کند (یا هر زبان مادری دیگری که شما با آن روزانه صحبت می کنید).
کلیه ی دستورها به نقطه ویرگول ";" ختم می شوند. متدها و کلاس ها نیز با علامت "}" آغاز شده وبا علامت "{" به پایان می رسند. تمام دستورهایی که شاملِ "{" and "}" می شوند یا داخل آن قرار می گیرند نیز بلوک (block) را می سازند. بلوک ها محدوده ی (lifetime یا دید و visibility) یک برنامه را مشخص می کنند.
پذیرفتن ورودی خط-فرمان (command-line input)
در مثال پیش، شما به سادگی یک برنامه را اجرا کردید و برنامه هم یک خروجی تحویل شما داد. با این حال، تعداد زیادی از برنامه ها به گونه ای طراحی شده اند که ورودی خط-فرمان (command-line input) را می پذیرد. این ویژگی نوشتن اِسکریپت های خودکار که خود برنامه را فراخوانده و اطلاعات را به آن ارسال می کند را بسیار سهولت می بخشد. اگر به خیلی از برنامه ها از جمله برنامه های سیستم عامل ویندوز که هر روز از آن استفاده می کنید توجه کنید، پی می برید که اکثر آن ها نوعی رابط خط فرمان دارند. برای مثال، اگر Notepad.exe MyFile.txt را در کادر جستجو وارد کنید، برنامه ی Notepad اجرا می شود و MyFile.txt شما را باز می کند تا شما بتوانید آن را اصلاح کنید. همچنین می توانید کاری کنید که برنامه های شما command-line input را همان گونه که در اسمبلی لیست 2-1 می بینید بپذیرد، که نشان می دهد چگونه برنامه یک اسم را از command-line پذیرفته وآن را برای کنسول می نویسد.
توجه
دقت کنید که هنگام اجرای NamedWelcome.exe در اسمبلی لیست 2-1، باید به طور حتم یک آرگومان خط فرمان فراهم کنید. برای مثال، پس از تایپ اسم برنامه، your name را به دنبال آن اضافه کنید. NamedWelcome YourName. هدف listing1-2 هم نشان دادن نحوه ی مدیریت و برخورد با ورودی خط فرمان است. بنابراین، برای این که برنامه فعال شود باید یک آرگومان (argument) در خط فرمان وارد کنید. اگر در حال کار با برنامه ی visual studio هستید، در solution explorer روی project کلیک راست کنید، گزینه ی properties را انتخاب کنید، روی debug tab کلیک کنید و پس از یافتن start options، yourname را در آرگومان های خط فرمان وارد کنید. چناچه فراموش کردید، yourname را در خط فرمان تایپ کنید یا آن را در project properties وارد کنید، با استثنایی مواجه می شوید که این پیغام را اعلام می کند "Index was outside the bounds of the array. " (اندیس خارج از محدوده ی آرایه یافت شد).
Listing 1-2. دریافت ورودی خط-فرمان (command- NamedWelcome. cs: line input)
// Namespace Declaration using System; // Program start class class NamedWelcome { // Main begins program execution. static void Main(string[] args) { // Write to console Console. WriteLine("Hello، {0}!", args[0] ); Console. WriteLine("Welcome to the C# Station tahlildadeh!"); } }
نکته
به خاطر داشته باشید که your name را به این صورت به خط فرمان اضافه کنید. "NamedWelcome Joe". در غیر این صورت، برنامه ی شما به مشکل بر می خورد.
چناچه از IDE مانند visual studio استفاده می کنید، برای یادگیری نحوه ی انتخاب گزینه ی خط فرمان (command-line option) از طریق project properties، به قسمت help documentation مراجعه کنید. به طور مثال، اگر در حال کار با visual studio 2010 هستید، به solution project بروید و روی نام پروژه کلیک راست کرده و بر روی properties کلیک کنید، debug tab را انتخاب کرده و سپس yourname را درآرگومان های خط فرمان ( command-line argument) وارد کنید.
اگر به listing1-2 توجه کنید، متوجه یک ورودی (entry) درفهرست پارامتر main method می شوید. اسم پارامتر args است که شما از آن بعداً به منظور اشاره به پارامتر استفاده می کنید. عبارت string[] نوع پارامتر args را تعریف می کند. نوع string کاراکترهایی دارد. این کاراکترهامی توانند یک یا چند واژه بسازند. علامت "[]" array را نشان می دهد که شبیه به یک فهرست یا لیست است. بنابراین، نوع پارامتر args در واقع یک فهرست از کلمات برگرفته از command-line یا همان خط دستور است. هرگاه شما string[] args را به فهرست پارامتر main method اضافه کنید، مترجم C# کدی صادر می کند که آرگومان های خط فرمان را تجزییه کرده و آرگومان های خط فرمان را در داخل بارگزاری می کند. با خواندن args، شما به تمام آرگومان ها تایپ شده در خط فرمان به جز اسم برنامه (application name) دسترسی پیدا خواهید کرد. در داخل main method شما همچنین با دستور دیگری به نام Console. WriteLine(. . . ) مواجه خواهید شد. فهرست آرگومان های داخل دستور با قبل متفاوت خواهد بود. رشته ای فرمت شده دارد که پارامتر "{0}" در داخل آن گنجانده شده. اولین پارامتر رشته ی فرمت شده از صفر آغاز می شود و دومی از یک و غیره. پارامتر "{0}" به این معنا است که آرگومان پس از (علامت) نقل و قول پایانی (") تعیین می کند که چه چیز در آن مکان قرار گیرد. حال توجه خود را جلب این آرگومان می کنیم.
آرگومان args[0] به اولین رشته در آرایه ی args اشاره دارد. اولین عنصر یک آرایه شماره ی 0 و دومی عدد 1 است و غیره. برای مثال، اگر در خط فرمان NamedWelcome Joe تایپ کنید، مقدار args[0] "Joe". خواهد بود. این تا حدی مشکل است، زیرا شما می دانید که در خط فرمان NamedWelcome.exe تایپ کرده اید، اما C# اسم برنامه ی اجرا شدنی (executable application name) را در داخل فهرست args قرار نمی دهد و تنها اولین پارامتر پس از برنامه ی اجراشدنی را در آن می گنجاند.
حال به پارامتر گنجانده شده در formatted stringبازمی گردیم: چون که args[0] اولین آرگومان پس از رشته ی فرمت شده، دستور Console.WriteLine() می باشد ، مقدارش در اولین پارامتر گنجانده شده در formatted string قرارمی گیرد. پس از اجرای این فرمان، مقدار args[0] که همان "Joe". می باشد جایگزین "{0}" در رشته ی فرمت شده می گردد. به محض اجرای خط فرمان با "NamedWelcome Joe"، خروجی به شرح زیر در اختیار شما قرار می گیرد.
Hello، Joe!
Welcome to the C# Station Tutorial!
تعامل به وسیله ی خط فرمان
جدا از ورودی خط-فرمان، راه دیگری نیز برای وارد کردن ورودی یا input در برنامه وجود دارد که آن از طریق کنسول صورت می پذیرد. معمولاً، به این صورت کار می کند: از کاربر می خواهید که ورودی فراهم کند، کاربر چیزی را تایپ کرده و دگمه ی enter را می زند. سپس شما ورودی کاربر را خوانده و دست به کار می شوید. listing 1-3 برای شما نمایش می دهد چگونه از کاربر ورودی فعل و انفعالی یا محاوره ای دریافت کنید.
:Listing1-3دریافت ورودی فعل و انفعالی InteractiveWelcome.cs
// Namespace Declaration
using System;
// Program start class
class InteractiveWelcome
{
// Main begins program execution.
public static void Main()
{
// Write to console/get input
Console. Write("What is your name?: ");
Console. Write("Hello، {0}! ", Console. ReadLine());
Console. WriteLine("Welcome to the C# Station Tahlildadeh!");
}
}
در این listing از هیچ پارامتری در main method استفاده نشده (بیشتر به این خاطر که ضرورتی ندارد). همچنین توجه داشته باشید که معرفی main method با کلیدواژه ی public پیش نویسی شده است. کلیدواژه ی public به این معنا است ، هر عنصری خارج از این کلاس هم می تواند به آن عضو کلاس دست پیدا کند. درمورد main، این چندان اهمیتی ندارد زیرا که کُد شما هیچگاه main را فرا نمی خواند. دسترسی پیش فرض، private (خصوصی) است به این معنا که فقط اعضای کلاس به آن دسترسی دارند. به کلید واژه هایی همچون private و publicتعریف کننده های دسترسی یا access modifier گفته می شود. در درس 19 بیشتر به این موضوع خواهیم پرداخت.
کلا سه دستور داخل main وجود دارد که دوتای اولی با سومی تفاوت دارد. آن ها به جای Console. WriteLine(. . . ). ، Console. Write(. . . )هستند. تفاوت بینشان این است که دستور Console. Write(. . . ) به کنسول می نویسد و در همان خط متوقف می شود ، در حالی که Console. WriteLine(. . . ). پس از نوشتن به کنسول به خط بعدی می رود.
دستور اولی تنها این را به کنسول می نویسد : "What is your name?: ".
دستور دومی تا زمانی که آرگومان هایش به طور کامل ارزیابی نشده اند چیزی نمی نویسد. اولین آرگومان پس از رشته ی فرمت شده Console. ReadLine() است. Console. ReadLine() برنامه را مجبور می کند که در کنسول منتظر ورودی کاربر بماند. پس از این که کاربر ورودی را تایپ کرد، که در این مورد اسمشان منظور است، باید دگمه ی enter را بزند. مقدار بازگشتی این عملیات جایگزین پارامتر "{0}" در formatted string شده و سپس برای کنسول نوشته می شود. این خط را به صورت زیر نیز می توانستید بنویسید.
string name = Console. ReadLine();
Console. Write("Hello {0}! ", name);
چکیده
اکنون با مبانی و ساختار برنامه ی C# آشنا شده اید. استفاده از دستورها به شما اجازه می دهد که به فضاهای نامی ارجاع دهید و همچنین به اختصار و خوانایی نشانه گذاری(قرارداد یا notation) کمک شایانی می کند. Main method نقطه ی ورودی شروع کار با زبان برنامه نویسی C# است. شما می توانید ورودی خط فرمان را با خواندن، زمان اجرای برنامه، از پارامتر string[] (آرایه ی رشته) در Main method خود ضبط کنید. I/Oمحاوره ای (ورودی و خروجی فعل و انفعالی) را می توان با عملیات ،method ReadLine Write ،WriteLine کلاس کنسول (console class) انجام داد.