مقدمه
C# یکی از زبانهای جدید برنامهسازی شیگرا است که با ارائه رهیافت Component-Based به طراحی و توسعه نرمافزار میپردازد. آنچه ما در حال حاضر از زبان های برنامهسازی Component-Based در اختیار داریم و آنچه که C# در اختیار ما قرار میدهد، افق جدیدی به سوی تولید و طراحی نرمافزارهای پیشرفته را در روی ما قرار میدهند.
نرمافزار، به عنوان یک سرویس، هدف اصلی نسل بعدی در سیستمهای محاسباتی است. برای مثال، C# زبانی مناسب برای تولید و طراحی صفحات وب، ایجاد اجزایی با قابلیت استفاده مجدد و ایجاد محیطهایی چند رسانهای را به عنوان زبانی که هدفش توسعه ایجاد نرمافزارهای پیشرفته است، در اختیار ما قرار میدهد.
زبان برنامهسازی C#، به همراه تکنولوژی جدید شرکت نرمافزاری مایکروسافت یعنیNET. ارائه گردید، از این رو از تکنولوژیNET. این شرکت بهره میبرد. پس در ابتدا به بیان مطالبی درباره محیطNET. میپردازیم.
فصل اول:تکنولوژی NET.
چراNET.؟
در گذشته زبانهای برنامهسازی، سیستمهای عامل و محیطهای اجرایی نرمافزارها برای دورهای خاص ساخته میشدند. هنگامیکه برنامهها از محیطهای رومیزی(Desktop) به اینترنت منتقل میشدند، ابزارهای موجود نیازمند API هایی اضافی و قابلیتهای دیگری بودند. بیشتر این قابلیتها در کنار زبانهای برنامهسازی بعنوان ابزارهایی جهت رفع این نیازمندیها ارائه میشدند. هرچند این ابزارهای اضافی بصورت قابل توجهی نیازمندیها را حل کرده و باعث رسیدن اینترنت به وضعیت کنونی شدند، اما همچنان مسائل بسیاری وجود داشت که نیاز به حل شدن داشتند.
NET. به منظور پشتیبانی از کاربردهای عصر جدید اینترنت ساخته شد. مواردی همچون گسترش، امنیت و versioning، که از مسایل مهممی بودند، توسط NET. پوشش داده شدند. قسمت مرکزیNET. بخش CLR (Common Language Runtime) است که یک موتور اجرایی مجازی است که از توسعه، امنیت و ارتقای نسخه کد پشتیبانی مینماید. در گذشته چنین امکاناتی برای کدهای کامپایل شده فراهم نبود. بدلیل اینکهNET. توانست بر این مشکلات اساسی فائق آید، راه حل قدرتمندتری جهت ساخت برنامههای تحت اینترنت به شمار میرود.
NET. چیست؟
NET. محیطی جهت ساخت برنامههای توزیع شده است که شامل ابزارهایی نظیر ""کتابخانه کلاسهای پایه"(BCL: Base Class Library)، CLR و زبانهای برنامهنویسی است. این ابزارها امکان ساخت انواع مختلفی از نرمافزارها، از قبیل فرمهای ویندوز، ADONET.، ASPNET. و سرویسهای وب، را فراهم میآورند.
فرمهای ویندوز، مجموعهای از کتابخانهها جهت ساخت رابطهای کاربر گرافیکی برای برنامههای کاربردی است. این کتابخانهها اغلب API های Win32 را در خود دارا میباشند. همچنین امکان استفاده از رهیافت شیگرایی را جهت تولید آسان برنامههای تحت ویندوز، فراهم میآورند.
ADONET. مجموعهای از کلاسهای شیگرایی است که جهت ساخت مولفههای داده و سطوح دسترسی داده در برنامههای n-tiered مورد استفاده قرار میگیرد.
ASPNET. شامل مدل برنامهنویسی فرمهای وب است که بوسیله آن برنامههای تحت وب ساخته شده و تحت اینترنت قابلیت اجرا پیدا کرده و از طریق مرورگر(Browser) قابل دسترسی میباشند. این روش مدل بهبود یافته برنامهسازی وب است که در آن کدها در سرور کامپایل میشوند ولی همانند صفحات HTML در کامپیوتر مشتری اجرا میشوند.
سرویسهای وب، رهیافتی جدید، مستقل از platform و استاندارد، جهت ایجاد ارتباط و فعالیت بین سیستمهای ناهمگون در اینترنت، میباشند. سرویسهای وبNET.، از زیر ساخت شیگرایی برنامهنویسی ASPNET. استفاده میکنند، اما همچنان از استانداردهای باز و مدلی بر پایه پیغام(Message Based Model) استفاده مینمایند. استفاده از استانداردهای باز از قبیل XML، WSDL و UDDI باعث میشوند تا سرویسهای وب با سایر سرویسهای وب استاندارد که پیادهسازیهایی متفاوت دارند، بدون توجه به محیط و platform آنها، ارتباط برقرار نمایند.
این چند نمونه، اندکی از انواع مختلف نرمافزارهایی بودند که میتوان تحتNET. به پیادهسازی آنها پرداخت.
کتابخانههای کلاسهای پایه(Base Class Library: BCL)
BCL درNET.، شامل هزاران نوع قابل استفاده، جهت افزایش بهرهوری در ساخت برنامههایNET. است. به علت گستردگی BCL یادگیری تمام کلاسهای آن وقتگیر بوده و امکان پذیر نمیباشد، به همین دلیل برای صرفهجویی در زمان بهتر است قبل از ایجاد یک نوع خاص به جستجوی نوعهای موجود در BCL بپردازیم. نگاهی کلی به BCL میتواند بسیار سودمند باشد. جدول زیر Namespace های مهم و توضیح نوعهای مختلف BCL را نمایش میدهد.
(جدول در فایل اصلی موجود است)
هر Namespace مجموعهای از کلاسهای از پیس ساخته شده NET. است که میتوان از آنها در برنامههای مختلف استفاده نمود.
(Common Language Runtime)CLR
CLR یک موتور اجرایی است که با هدف اصلی اجرای هدایت شده کدها درNET. ایجاد گردیده است. CLR به مدیریت اجرا، ارتقای نسخه و امنیت تمامی کدها درNET. میپردازد. به همین دلیل کدهایNET. یا C# اغلب تحت عنوان کدهای مدیریت شده، شناخته میشوند.(Managed Code) تمامی کدهایی که به CLR مرتبت هستند، تحت عنوان "مدیریت شده" و کدهایی توسط CLR مدیریت نشدهاند، بلکه مستقیماً به کد ماشین تبدیل میشوند، تحت عنوان "مدیریت نشده" بیان میشوند.
کدهای مدیریت شده، به کد ماشین کامپایل نمیشوند، بلکه به زبان سطح میانی مایکروسافت(MSIL) کامپایل شده و مورد استفاده قرار میگیرند. این زبان سطح میانی را میتوان زبانی شبیه به زبان اسمبلی تصور کرد. IL در حافظه بارگذاری میشود و بلافاصله بوسیله CLR در حافظه به کد ماشین کامپایل میگردد.
برنامههایNET. از اسمبلیهایی تشکیل شدهاند که اجزای خودکار منطقی توسعه، شناسایی و امنیت به حساب میآیند و تفاوت آنها با روشهای قدیمی در آن است که اسمبلی میتواند شامل یک یا چندین فایل باشد. اسمبلیNET. به صورت یک فایل اجرایی تک یا یک فایل کتابخانهای است، اما ممکن است حاوی ماژولها، که کدهایی غیر اجرایی بوده و قابلیت استفاده مجدد را دارند، نیز باشد.
مسئله مهم دیگر در مورد CLR، نحوه بارگذاری(Load) و اجرای برنامه توسط آن است. به محض اینکه برنامه NET. شروع به اجرا میکند، ویندوز اسمبلیNET. راتشخیص داده و CLR را اجرا میکند. سپس CLR نقطه شروع برنامه را شناسایی و پروسه تعیین انواع که در آن، محل قرارگیری انواع مختلف بکار رفته در برنامه مشخص میشود را، اجرا میکند. اسمبلی شناسایی شده در پروسه Loader بارگذاری میگردد.
شکل 1-1 نحوه مدیریت برنامهها توسط CLR
(شکل در فایل اصلی موجود است)
زبان های برنامهنویسی
قسمت مهم دیگرNET.، پشتیبانی آن از چندین زبان برنامهنویسی متفاوت است. IL طوری طراحی شده است که از چندین زبان برنامهنویسی پشتیبانی نماید. در حقیقت، هم اکنون دهها زبان برنامهنویسی مورد پشتیبانی و پذیرش IL میباشند. علاوه بر C#،NET. شامل زبانهایی نظیر Visual Basic، Jscript، J# و C++ نیز میباشد. برخی دیگر از زبانهای برنامهسازی مهم که بوسیله IL پشتیبانی میشوند عبارتند از: Borland DelphiNET.، CobolNET.، Fujitsu، PythonNET.، PerlNET. و بسیاری دیگر از زبانهای برنامهسازی که تحتNET. عمل میکنند و بوسیله آن مورد پذیرش هستند.
عامل اصلی نگهدارنده این زبانها در کنار یکدیگر، (Common Types System)CTS است. اگرچه هر یک از این زبانها نوعهای خود را در روشهای خاص خود ارائه میدهند، رفتار زیرساختی هر یک از آنها نسبت به CLR یکسان است. CTS اعضای یک نوع را مشخص مینماید: فیلد، متد، رخداد، ویژگی(Property) و اندیکسر(Indexer). همچنین سطوح دسترسی به آنها را نیز معین مینماید: عمومی(public)، داخلی(internal)، حفاظت شده (protected)، حفاظت شده داخلی(protected internal) و خصوصی(private). البته باید توجه کرد که مسلماً کلمات کلیدی هر یک از زبانها با سایر زبانها متفاوت است اما ساختار اصلی آنها در CLR یکسان است.
سوال مهمی که در اینجا مطرح میگردد، اینست که چرا از چندین زبان استفاده میشود؟ برای پاسخ به این سوال توجه شما را به پروژههای تجاری عظیم جلب میکنم. همانطور که میدانید هر پروژه تجاری دارای شرایط و ویژگیهای خاص به خود است و یکی از مهمترین عوامل در تولید و راهبری پروژههای امروزی امکان استفاده مجدد از برنامهها است. استفاده از چندین زبان برنامهنویسی اولاً میتواند نیاز هر نوع پروژهای را طبق خواستهای آن برآورده کند و ثانیاً قابلیت استفاده مجدد را افزایش میدهد.
یکی دیگر از مزایای استفاده از چندین زبان برنامهنویسی، تجارت بینالمللی است، بدین معنا که هر شرکت میتواند نرمافزار و محصول خود را با یکی از زبانهای مورد نظر خود ساخته و بدون نگرانی از عدم همخوانی آن با سایر محصولات به بازار ارایه نماید. پشتیبانیNET. از رنج وسیعی از زبانهای برنامهنویسی امکان به اشتراکگذاری کدها و استفاده مجدد از برنامهها را به راحتی فراهم کرده و عصر جدیدی را در تولید نرمافزار ایجاد نموده است.
مزایای پشتیبانی از چندین زبان برنامهنویسی
این امکان باعث میشود تا هر فرد با توجه به علایق و سوابق کاری خود به برنامهنویسی با زبانی خاص بپردازد. بعنوان مثال فرض کنید گروهی مدتها با COBOL برنامهنویسی کردهاند، حال چونNET. از این زبان نیز پشتیبانی میکند، این گروه با صرف مدت زمانی کوتاه میتوانند بهNET. رویآورده و از مزایای آن بهرهمند شوند. از دیگر مزایای چند زیانی استفاده مجدد از مولفهها و اجزای برنامههای نوشته شده است.
البته به یک نکته مهم باید توجه کرد، که منظور در اینجا این نیست که در یک پروژه با چندین زبان شروع به برنامهنویسی کنیم، اما با قابلیتNET. میتوانیم مثلاً dll های نوشته شده به زبان C# را در یک پروژهای که با زبان VBNET. نوشته میشود، مورد استفاده قرار دهیم.
در این جا باید به این نکته نیز توجه کرد که همگونی و سازگاری بین دو زبان همیشه بصورت کامل و خودکار صورت نمیگیرد و در برخی موارد هر زبان ویژگیهای خاص خود را دارد که در زبان دیگر قابل اجرا و شناسایی نمیباشد. بعنوان مثال، برنامههای VBNET. نمیتوانند با dll های C# که دارای متدهای عمومی هستند و نوع آنها به طور اشارهگر(pointer) تعریف شده است، کار نمایند.
"خصوصیات عمومی زبان" یا CLS به منظور حل چنین مشکلاتی طراحی شده است. CLS ویژگیهای عمومی یک زبان را مشخص میکند و تعیین میکند که زبانها در صورت نیاز به اشتراکگذاری کدها تا چه حدی میتوانند عمل نمایند. بعنوان مثال، C# برای اینکه بخواهد با CLS همخوانی داشته باشد، نباید اشارهگرها و نوعهای بدون علامت را به صورت عمومی(public) در نظر بگیرد.
فصل دوم: آغاز کار با C#
در این درس با ارائه چند برنامه و مثال ساده به طرز کار زبان C# میپردازیم. اهداف این درس عبارتند از:
فهم ساختار پایهای یک برنامه C#
آشنایی با Namespace
آشنایی با کلاس (Class)
آشنایی با عملکرد متد Main()
آشنایی با ورودی/خروجی یا I/O
لیست 1-2، یک برنامه ساده با عنوان Welcome در زبان C#
// Namespace اعلان
using System;
// کلاس آغازین برنامه
class WelcomeCSS
{
// آغاز کار اجرای برنامه
public static void Main()
{
// نوشتن متن در خروجی
Console.WriteLine("Welcome to the C# Persian Tutorial!");
}
}
برنامه لیست 1-2 دارای 4 پارامتر اصلی است، اعلان Namespace، کلاس، متد Main() و یک دستور زبان C#.
در همین جا باید به یک نکته اشاره کنم، برای زبان C# همانند بیشتر زبانهای برنامهسازی دو نوع کامپایلر وجود دارد. یک نوع کامپایلر که به کامپایلر Command Line معروف است و نوع دیگر کامپایلر Visual است. کامپایلرهای Command Line محیطی شبیه به محیط DOS دارند و با دادن یک سری دستورات به اجرا در میآیند. کامپایلرهای Visual محیطی همانند ویندوز دارند که با دارا بودن محیط گرافیکی و ابزارهای خاص، برنامهنویس را در امر برنامهسازی کمک میکنند. از نمونههای هر یک از کامپایلرها، میتوان به Microsoft C# Command Line Compiler که یک کامپایلر Command Line و Microsoft Visual C# که یک کامپایلر Visual است، اشاره کرد. البته در حال حاضر بیشتر از کامپایلرهای ویژوال استفاده میشود.
من سعی میکنم در آینده به توضیح محیط Visual C# و Visual StudioNET. بپردازم. اما فعلاً برای اجرای برنامهها میتوانید از Visual StudioNET. استفاده کنید. پس از نصب آن، وارد محیط C# شده و در قسمت انتخاب برنامه جدید گزینه Console را جهت اجرای برنامهها انتخاب نمایید.
برای این درس، فعلاً به توضیحات بیشتر درباره محیط ویژوال نمیپردازم اما در آینده به توضیح کامل محیط Visual StudioNET. خواهم پرداخت.
برای اجرای کد بالا در صورتیکه از محیط ویژوال استفاده میکنید باید بر روی دکمه Run کلیک کنید و در صورتیکه کامپایلر Command Line دارید با دستور زیر میتوانید برنامه را اجرا کنید: csc Welcome.cs
پس از اجرای برنامه، کامپایلر برای شما یک فایل قابل اجرا(Executable) تحت نام Welcome.exe تولید میکند.
نکته: در صورتیکه از Visual StudioNET.(VSNET.) استفاده کنید، پس از اجرای برنامه، یک صفحه برای نمایش خروجی به سرعت باز شده و بسته میشود و شما قادر به دیدن خروخی نخواهید بود. برای اینکه بتوانید خروجی برنامه را ببینید، در انتهای برنامه دستور زیر را وارد نمایید:
Console.ReadLine();
استفاده از این دستور باعث میشود تا برنامه منتظر دریافت یک ورودی از کاربر بماند، که در این حالت شما میتوانید خروجی برنامه خود را دیده و سپس با زدن کلید Enter برنامه را خاتمه دهید.
نکته دیگری که در مورد زبان برنامهنویسی C# باید مورد توجه قرار دهید اینست که این زبان Case Sensitive است، بدین معنا که به حروف کوچک و بزرگ حساس است یعنی برای مثال ReadLine با readLine متفاوت است به طوریکه اولی جزو دستورات زبان C# و دومی به عنوان یک نام برای متغیر یا یک تابع که از طرف کاربر تعریف شده است در نظر گرفته میشود.
اعلان Namespace به سیستم اعلان مینماید که شما از توابع کتابخانهای System جهت اجرای برنامهها خود استفاده مینمایید. دستوراتی مانند WriteLine و ReadLine جزو توابع کتابخانهای System میباشند. اغلب دستورات و توابع مهم و کلیدی استفاده از کنسول ورودی/خروجی در این کتابخانه میباشد. در صورتیکه در ابتدای برنامه از using System استفاده نکنید، یابد در ابتدای هر یک از دستورات برنامه که مربوط این کتابخانه است، از کلمه System استفاده نمایید. بعنوان مثال در صورت عدم استفاده از using System باید از دستور System.Console.WriteLine() به جای Console.WriteLine() استفاده نمایید.
تعریف کلاس،Class Welcome CSS، شامل تعریف دادهها(متغیرها) و متدها جهت اجرای برنامه است. یک کلاس، جزو معدود عناصر زبان C# است که بوسیله آن میتوان به ایجاد یک شی (Object) از قبیل واسط ها (Interfaces) و ساختارها(Structures)، پرداخت. توضیحات بیشتر در این زمینه در درسهای آینده ذکر میشوند. در این برنامه کلاس هیچ داده و متغیری ندارد و تنها شامل یک متد است. این متد، رفتار(Behavior) این کلاس را مشخص میکند.
متد درون این کلاس بیان میکند که این کلاس چه کاری را پس از اجرا شدن انجام خواهد داد. کلمه کلیدی Main() که نام متد این کلاس نیز میباشد جزو کلمات رزرو شده زبان C# است که مشخص میکند برنامه از کجا باید آغاز به کار نماید. وجود متد Main() در تمامی برنامههای اجرایی ضروری است. در صورتیکه یک برنامه حاوی متد Main() نباشد بعنوان توابع سیستمی همانند dll های ویندوز در نظر گرفته میشود.
قبل از کلمه Main() کلمه دیگری با عنوان static آورده شده است. این کلمه در اصطلاح Modifier میگویند. استفاده از static برای متد Main() بیان میدارد که این متد تنها در در همین کلاس قابل اجراست و هیچ نمونهای (Instance) دیگری از روی آن قابل اجرا نمیباشد. استفاده از static برای متد Main() الزامی است زیرا در ابتدای آغاز برنامه هیچ نمونهای از هیچ کلاس و شیای موجود نمیباشد و تنها متد Main() است که اجرا میشود. (در صورتیکه با برخی اصطلاحات این متن از قبیل کلاس، شی، متد و نمونه آشنایی ندارید، این به دلیل آنست که این مفاهیم جزو مفاهیم اولیه برنامهنویسی شیگرا (OOP) هستند. سعی میکنم در درسهای آینده به توضیح این مفاهیم نیز بپردازم، ولی فعلاً در همین حد کافی میباشد.)
هر متد باید دارای یک مقدار بازگشتی باشد، یعنی باید مقداری را به سیستم بازگرداند، در این مثال نوع بازگشتی void تعزیف شده است که نشان دهنده آنست که این متد هیچ مقداری را باز نمیگرداند یا به عبارت بهتر خروجی ندارد. همچنین هر متد میتواند دارای پارامترهایی نیز باشد که لیست پارامترهای آن در داخل پرانتزهای جلوی آن قرار میگیرد. برای سادگی کار در این برنامه متد ما دارای هیچ پارامتری نیست ولی در ادامه همین درس به معرفی پارامترها نیز میپردازم.
متد Main() رفتار و عمل خود را بوسیله Console.WriteLine(…) مشخص مینماید. Console کلاسی در System است و WriteLine() متدی در کلاس Console. در زبان C# از اپراتور "." (نقطه dot) جهت جداسازی زیرروتینها و زیرقسمتها استفاده میکنیم. همانطور که ملاحظه میکنید چون WriteLine() یک متد درون کلاس Console است به همین جهت از "." جهت جداسازی آن استفاده کردهایم.
در زبان C#، برای قرار دادن توضیحات در کد برنامه از // استفاده میکنیم. بدین معنا که کامپایلر در هنگام اجرای برنامه توجهی به این توضیحات نمیکند و این توضیحات تنها به منظور بالا بردن خوانایی متن و جهت و کمک به فهم بهتر برنامه قرار میگیرند. استفاده از // تنها در مواردی کاربرد دارد که توضیحات شما بیش از یک خط نباشد. در صورت تمایل برای استفاده از توضیحات چند خطی باید در ابتدای شروع توضیحات از /* و در انتها آن از */ استفاده نمایید. در این حالت تمامی مطالبی که بین /* */ قرار میگیرند به عنوان توضیحات (Comments) در نظر گرفته میشوند.
تمامی دستورات (Statements) با ";"، سمی کولون، پایان مییابند. کلاسها و متدها با } آغاز شده و با { خاتمه مییابند. تمامی دستورات بین { } یک بلوک را میسازند.
بسیاری از برنامهها از کاربر ورودی دریافت میکنند. انواع گوناگونی از این ورودیها میتوانند به عنوان پارامتری برای متد Main() در نظر گرفته شوند. لیست 2-2 برنامهای را نشان میدهد نام کاربر را از ورودی دریافت کرده و آن را بر روی صفحه نمایش میدهد. این ورودی به صورت پارامتری برای متد Main() در نظر گرفته شده است.
لیست 2-2: برنامهای که ورودی را از کاربر، بعنوان پارامتر Main()، دریافت میکند.
// Namespace اعلان
using System;
// کلاس آغازین برنامه
class NamedWelcome
{
// آغاز اجرا برنامه
public static void Main(string[] args)
{
// نمایش بر روی صفحه
Console.WriteLine("Hello, {0}!", args[0]);
Console.WriteLine("Welcome to the C# Persian Tutorial!");
}
}
توجه داشته باشید که این برنامه، ورودی را به صورت Command-Line دریافت میکند و در هنگام اجرای برنامه باید ورودی را در Command-Line وارد نمایید. در صورتیکه ورودی را وارد ننمایید برنامه دچار مشکل شده و متوقف خواهد شد.
همان طور که در لیست 2-2 مشاهده مینمایید، پارامتر متد Main() با عنوان args مشخص شده است. با استفاده از این نام در داخل متد میتوان آن استفاده نمود. نوع این پارامتر از نوع آرایهای از نوع رشته (string[]) در نظر گرفته شده است. انواع(types) و آرایهها را در درسهای بعدی بررسی میکنیم. فعلاً بدانید که آرایه رشتهای جهت نگهداری چندین کاراکتر مورد استفاده قرار میگیرد. [] مشخص کننده آرایه هستند که مانند یک لیست عمل میکند.
همانطور که ملاحظه میکنید در این برنامه دو دستور Console.WriteLine(…) وجود دارد که اولین دستور مقداری با دستور دوم متفاوت است. همانطور که مشاهده میکنید داخل دستور Console.WriteLine(…) عبارتی به شکل {0} وجود دارد. این آرگومان، نشان میدهد که به جای آن چه مقداری باید نمایش داده شود که در این جا args[0] نشان داده میشود. عبارتی که داخل " " قرار دارد عیناً در خروجی نمایش داده میشود، به جای آرگومان {0}، مقداری که پس از " قرار دارد، قرار میگیرد. حال به آرگومان بعدی یعنی args[0] توجه کنید. مقدار صفر داخل [] نشان میدهد که کدام عنصر از آرایه مورد استفاده است. در C# اندیس آرایه از صفر شروع میشود به همین جهت برای دسترسی به اولین عنصر آرایه باید از اندیس صفر استفاده کنیم.(همانطور که قبلاً نیز کفتم آرایهها را در درسهای آینده توضیح خواهم داد، هدف از این درس تنها آشنایی با C# است.!)
مجدداً به آرگومان {0} بازگردیم. این آرگومان نشان می دهد که یک مقدار باید در رشته خروجی قرار گیرد، این مقدار همان args[0] است. اگر شما این برنامه را از طریق Command-Line اجرا نمایید خروجی شبیه به زیر خواهید گرفت:
>Hello!, Meysam!
>Welcome to C# Persian Tutorial!
همان گونه که میبینید، پس از اجرای برنامه نام شما که از طریق Command-Line آنرا وارد نمودهاید در خروجی ظاهر میشود. استفاده از آرگومان {n}، که در آن n یک مقدار عددی است، جهت فرمت دادن به متن خروجی است که بر روی صفحه به نمایش در میآید. مقدار n از صفر آغاز شده و به ترتیب افزایش میباید. به مثال زیر توجه کنید:
Console.WriteLine("Hello! ,{0} ,{1}, {2}",args[0],args[1],args[2]);
این خط از برنامه سه مقدار args[0],args[1],args[2] را در خروجی به ترتیب نمایش میدهد. ملاحظه مینمایید که چون 3 مقدار را میخواهیم نمایش دهیم، سه بار از آرگومان {n} استفاده کردهایم و هر بار یک واحد به مقدار قبلی افزودهایم. در آینده بیشتر با این مفاهیم آشنا میشویم.
مطلبی که باید در مورد لیست 2-2 به آن توجه شود آنست که این برنامه تنها از طریق Command-Lineقابل اجراست و در صورتیکه کاربر از این مطلب که برنامه باید دارای ورودی به صورت Command-Line باشد، بی اطلاع باشد و ورودی را در Command-Line وارد نکند، برنامه متوقف شده و اجرا نمیشود. پس برای رفع چنین مشکلی باید از روش بهتری جهت دریافت ورودی از کاربر استفاده کرد.
لیست 3-2: یک برنامه که قابلیت محاوره با کاربر را دارد.
// Namespace اعلان
using System;
// کلاس آغازین برنامه
class InteractiveWelcome
{
//آغاز اجرای برنامه
public static void Main()
{
// متنی بر روی صفحه نمایش داده میشود
Console.Write("What is your name?: ");
//متنی نمایش داده شده و برنامه منتظر دریافت ورودی میماند
Console.Write("Hello, {0}! ", Console.ReadLine());
Console.WriteLine("Welcome to the C# Persian Tutorial!");
}
}
همانطوریکه در این برنامه دیده می شود، متد Main() دارای پارامتر نیست. در عوض یک خط به متن برنامه لیست 2-2 اضافه شده است. در اولین خط از این برنامه، متنی با عنوان اینکه نام شما چیست؟ بر روی صفحه ظاهر میشود. سپس در خط بعدی پس از نوشتن کلمه Hello,، برنامه منتظر دریافت ورودی از کاربر میشود. بدین معنی که این بار تا زمانیکه کاربر متنی را به عنوان نام خود وارد نکند اجرای برنامه به پیش نخواهد رفت و خط بعدی اجرا نمیشود. این برنامه روش ایجاد ارتباط از طریق برنامه با کاربر را نمایش میدهد. در این مثال کاربر دقیقاً متوجه میشود که چه زمانی باید اطلاعات را وارد نماید و این اطلاعات چه باید باشد در حالیکه در مثال قبل چنین نبود. همانگونه که میبینید در این برنامه آرگومان {0} مستقیماً از طریق دستور Console.ReadLine() دریافت میشود و بلافاصله در خروجی نمایش داده میشود. دستور ReadLine() نیز یکی از متدهای کلاس Console است که بوسیله آن رشته ورودی خوانده میشود.