chat room senatorha

http://senatorha.com/baner.gif


بازگشت   انجمن گفتگوی سناتورها > انجمن کامپیوتر > نرم افزار های کامپیوتری > نرم افزار های برنامه نویسی

ثبت نام سريع
نام كاربري‌:‌ پسورد : تاييد پسورد : ايميل‌: تاييد ايميل‌ :
با قوانين انجمن موافق هستم

پاسخ
 
LinkBack ابزارهای موضوع جستجو در موضوع نحوه نمایش

# C
قدیمی 12-02-2008, 01:03 PM   #1 (permalink)

کاربر آخر فروم باز

 B@RBOD آواتار ها

 
تاریخ عضویت: Oct 2008
سن: 22
نوشته ها: 3,263
سپاس ها: 21
سپاس شده 408 در 349 پست
حالت من:
درجه: 44 [♥ Bé-Yêu ♥♥ Bé-Yêu ♥♥ Bé-Yêu ♥♥ Bé-Yêu ♥♥ Bé-Yêu ♥]
سابقه: 542 / 1084
سحر و جادو: 1087 / 5682
تجربه: 37%

Rep Power: 5 B@RBOD is on a distinguished road
# C

[SIZE=6]مباحث مربوط به # c[/SIZE]
  پاسخ با نقل قول

http://senatorha.com/baner.gif


مقدمه اي بر سي شارپ : قسمت اول
قدیمی 12-02-2008, 01:07 PM   #2 (permalink)

کاربر آخر فروم باز

 B@RBOD آواتار ها

 
تاریخ عضویت: Oct 2008
سن: 22
نوشته ها: 3,263
سپاس ها: 21
سپاس شده 408 در 349 پست
حالت من:
درجه: 44 [♥ Bé-Yêu ♥♥ Bé-Yêu ♥♥ Bé-Yêu ♥♥ Bé-Yêu ♥♥ Bé-Yêu ♥]
سابقه: 542 / 1084
سحر و جادو: 1087 / 5682
تجربه: 37%

Rep Power: 5 B@RBOD is on a distinguished road
Post مقدمه اي بر سي شارپ : قسمت اول

[CENTER][FONT=Arial][SIZE=2][COLOR=#000000][B]مقدمه اي بر سي شارپ : قسمت اول [/B][/COLOR][/SIZE][/FONT][/CENTER]
[FONT=Arial][SIZE=2]طي سلسله مقالاتي مي خواهيم با C# بيشتر آشنا شويم. فرض اين مقالات بر اين است كه آشنايي مختصري با زبانهاي برنامه نويسي داريد ، هر چند كار ما تقريبا از صفر شروع مي شود و هدف آن سادگي هر چه بيشتر است. [/SIZE][/FONT]
[FONT=Arial][SIZE=2]C# از دو زبان C++ و Java متولد شده است! حاوي بسياري از جنبه هاي C++ مي باشد اما ويژگي هاي شيء گرايي خودش را از جاوا به ارث برده است. [/SIZE][/FONT]
[FONT=Arial][SIZE=2]C# اگرچه از C++ گرفته شده است اما يك زبان "خالص" شيء گرا (Object oriented) مي باشد. هر دو زبان ياد شده جزو زبانهاي هيبريد محسوب مي شوند اما طراحان C# اين مورد را به اندازه ي C++ مهم تلقي نكرده اند. يك زبان هيبريد اجازه ي برنامه نويسي با شيوه هاي مختلف را ميسر مي كند. دليل اينكه C++ هيبريد است ، اين است كه قرار بوده تا با زبان C سازگار باشد و همين امر سبب گرديده تا بعضي از جنبه هاي C++ بسيار پيچيده شوند. [/SIZE][/FONT]
[FONT=Arial][SIZE=2]زبان سي شارپ فرض اش بر اين است كه شما مي خواهيد تنها برنامه نويسي شيء گرا انجام دهيد و همانند C++ مخلوطي از برنامه نويسي رويه ايي (Procedural) و شيء گرا را نمي خواهيد به پايان برسانيد. بنابراين بايد طرز فكر خودتان را با دنياي شيء گرايي تطبيق دهيد. در ادامه خواهيد ديد كه در سي شارپ هر چيزي شيء است حتي يك برنامه ي سي شارپ. [/SIZE][/FONT]
[SIZE=2][FONT=Arial][B]برنامه ي اول :[/B] [/FONT][/SIZE]
[FONT=Arial][SIZE=2]Visual studio.net را اجرا كنيد و سپس در صفحه ي ظاهر شده New Project را برگزينيد. حالا از گزينه ي Visual C# projects قسمت Console applications را انتخاب نماييد. نامي دلخواه همانند ex01 را وارد نموده و سپس Ok نماييد. كد زير به صورت خودكار براي شما توليد خواهد شد: [/SIZE][/FONT]

[FONT=Arial][SIZE=2]using System; [/SIZE][/FONT]
[FONT=Arial][SIZE=2]namespace ex01 [/SIZE][/FONT]
[SIZE=2][FONT=Arial]{ [/FONT][/SIZE]
[SIZE=2][FONT=Arial]/// [/FONT][/SIZE]
[SIZE=2][FONT=Arial]/// Summary description for Class1. [/FONT][/SIZE]
[SIZE=2][FONT=Arial]/// [/FONT][/SIZE]
[SIZE=2][FONT=Arial]class Class1 [/FONT][/SIZE]
[SIZE=2][FONT=Arial]{ [/FONT][/SIZE]
[SIZE=2][FONT=Arial]/// [/FONT][/SIZE]
[SIZE=2][FONT=Arial]/// The main entry point for the application. [/FONT][/SIZE]
[SIZE=2][FONT=Arial]/// [/FONT][/SIZE]
[SIZE=2][FONT=Arial][STAThread] [/FONT][/SIZE]
[SIZE=2][FONT=Arial]static void Main(string[] args) [/FONT][/SIZE]
[SIZE=2][FONT=Arial]{ [/FONT][/SIZE]
[SIZE=2][FONT=Arial]// [/FONT][/SIZE]
[SIZE=2][FONT=Arial]// TODO: Add code to start application here [/FONT][/SIZE]
[SIZE=2][FONT=Arial]// [/FONT][/SIZE]
[SIZE=2][FONT=Arial]} [/FONT][/SIZE]
[SIZE=2][FONT=Arial]} [/FONT][/SIZE]
[SIZE=2][FONT=Arial]} [/FONT][/SIZE]

[FONT=Arial][SIZE=2]اگر يك سري از مفاهيم آنرا متوجه نمي شويد اصلا مهم نيست! در مقالات آتي تمام اين موارد مفصل توضيح داده خواهند شد. [/SIZE][/FONT]
[SIZE=2][FONT=Arial]متد استاندارد Main در اينجا قسمتي است كه عمليات اصلي برنامه در حالت Console ( شبيه به برنامه هاي تحت داس اما 32 بيتي ) در آن انجام مي شود. [/FONT][/SIZE]
[SIZE=2][FONT=Arial]بدون متد Main برنامه هاي سي شارپ قادر به اجرا نخواهند بود. نوع آن در اينجا void تعريف شده است يعني اين متد خروجي ندارد. حتي اگر برنامه هاي استاندارد ويندوز را هم بخواهيد با C# بنويسيد بازهم متد Main حضور خواهد داشت ، هر چند به صورت خودكار ويژوال استوديو آنرا توليد مي كند. [/FONT][/SIZE]
[FONT=Arial][SIZE=2]طريقه ي نوشتن توضيحات (Comments) در سي شارپ همانند C++ مي باشد يعني : [/SIZE][/FONT]

[FONT=Arial][SIZE=2]/* any comments */ [/SIZE][/FONT]

[FONT=Arial][SIZE=2]ويا [/SIZE][/FONT]

[FONT=Arial][SIZE=2]// any comments [/SIZE][/FONT]

[FONT=Arial][SIZE=2]و تنها برنامه نويس براي نوشتن توضيحاتي در مورد كدهاي خود از آنها استفاده مي كند و در خروجي برنامه ظاهر نمي شوند. [/SIZE][/FONT]
[FONT=Arial][SIZE=2]فعلا براي پايان قسمت اول از شيء Console و متد WriteLine آن براي نمايش يك جمله ي ساده استفاده مي كنيم. راجع به متدها ، متغيرها و غيره در آينده بيشتر صحبت مي كنيم. [/SIZE][/FONT]
[SIZE=2][FONT=Arial]در آخر برنامه ي ما چيزي شبيه به عبارت زير مي باشد: [/FONT][/SIZE]

[FONT=Arial][SIZE=2]using System; [/SIZE][/FONT]
[FONT=Arial][SIZE=2]namespace ex01 [/SIZE][/FONT]
[SIZE=2][FONT=Arial]{ [/FONT][/SIZE]
[SIZE=2][FONT=Arial]class Class1 [/FONT][/SIZE]
[SIZE=2][FONT=Arial]{ [/FONT][/SIZE]
[SIZE=2][FONT=Arial][STAThread] [/FONT][/SIZE]
[SIZE=2][FONT=Arial]static void Main(string[] args) [/FONT][/SIZE]
[SIZE=2][FONT=Arial]{ [/FONT][/SIZE]
[SIZE=2][FONT=Arial]Console.WriteLine("Hello C#!"); [/FONT][/SIZE]
[SIZE=2][FONT=Arial]} [/FONT][/SIZE]
[SIZE=2][FONT=Arial]} [/FONT][/SIZE]
[SIZE=2][FONT=Arial]} [/FONT][/SIZE]

[FONT=Arial][SIZE=2]دكمه ي F5 را فشار دهيد تا برنامه اجرا شود.[/SIZE][/FONT]
[SIZE=2][FONT=Arial][B]تعريف متغيرها در سي شارپ:[/B] [/FONT][/SIZE]
[FONT=Arial][SIZE=2]سي شارپ عناصري را كه بكار مي گيرد همانند اعداد و كاراكترها ، به صورت نوع ها (Types) طبقه بندي مي كند. اين انواع شامل موارد زير مي شوند : [/SIZE][/FONT]
[SIZE=2][FONT=Arial]نوع هاي پايه ايي از پيش تعريف شده مانند اعداد و غيره. [/FONT][/SIZE]
[SIZE=2][FONT=Arial]نوع هاي تعريف شده توسط كاربر كه شامل STRUCT ها و ENUM ها مي شوند. [/FONT][/SIZE]
[SIZE=2][FONT=Arial][B]نحوه ي تعريف متغيرها از نوع هاي پايه ايي از پيش تعريف شده : [/B][/FONT][/SIZE]
[SIZE=2][FONT=Arial]همانطور كه مي دانيد از متغيرها براي نگهداري اطلاعات استفاده مي شود. در سي شارپ ابتدا نوع متغير و سپس نام متغير و در آخر يك سمي كولون بكار برده مي شود. براي مثال : [/FONT][/SIZE]

[FONT=Arial][SIZE=2]int a; [/SIZE][/FONT]

[FONT=Arial][SIZE=2]كه در اينجا متغير a بعنوان يك متغير حاوي اعداد صحيح تعريف شده است. [/SIZE][/FONT]
[SIZE=2][FONT=Arial]نكته ي مهمي كه در اينجا حائز اهميت است ، مقدار دهي اوليه ي متغيرها مي باشد. در غير اينصورت كامپايلر سي شارپ برنامه را بايك خطا متوقف مي كند. دليل اين امر هم اين است كه از استفاده از متغيرهاي بدون مقدار در طول برنامه جلوگيري شود تا ميزان خطاهاي در حين اجرا كاهش يابد. [/FONT][/SIZE]
[FONT=Arial][SIZE=2]نوع هاي داده اي پايه ي زير در در سي شارپ به صورت پيش فرض مهيا هستند: [/SIZE][/FONT]
[FONT=Arial][SIZE=2]object : نوعي است نامحدود كه مي تواند تمام انواع ديگر را نيز شامل شود. مثال : [/SIZE][/FONT]

[FONT=Arial][SIZE=2]object = null; [/SIZE][/FONT]

[FONT=Arial][SIZE=2]string : رشته ؛ در اينجا يك رشته توالي كاراكترهاي يونيكد مي باشد. مثال : [/SIZE][/FONT]

[FONT=Arial][SIZE=2]string s= "hello"; [/SIZE][/FONT]

[FONT=Arial][SIZE=2]sbyte : نوع داده ايي صحيح 8 بيتي علامت دار. [/SIZE][/FONT]
[SIZE=2][FONT=Arial]byte : نوع داده ايي صحيح 8 بيتي بدون علامت. مثال : [/FONT][/SIZE]

[FONT=Arial][SIZE=2]sbyte val = 12; [/SIZE][/FONT]

[FONT=Arial][SIZE=2]short : نوع داده ايي صحيح 16 بيتي علامت دار. [/SIZE][/FONT]
[SIZE=2][FONT=Arial]ushort : نوع داده ايي صحيح 16 بيتي بدون علامت. مثال : [/FONT][/SIZE]

[FONT=Arial][SIZE=2]short val = 12; [/SIZE][/FONT]

[FONT=Arial][SIZE=2]int : نوع داده ايي صحيح 32 بيتي علامت دار. [/SIZE][/FONT]
[SIZE=2][FONT=Arial]unit : نوع داده ايي صحيح 32 بيتي بدون علامت. مثال : [/FONT][/SIZE]

[FONT=Arial][SIZE=2]int val = 12; [/SIZE][/FONT]

[FONT=Arial][SIZE=2]long : نوع داده ايي صحيح 64 بيتي علامت دار. [/SIZE][/FONT]
[SIZE=2][FONT=Arial]ulong : نوع داده ايي صحيح 64 بيتي بدون علامت. مثال : [/FONT][/SIZE]

[FONT=Arial][SIZE=2]Long val1 = 12; long val2 = 34L; [/SIZE][/FONT]

[FONT=Arial][SIZE=2]كلا در اينجا u به معناي unsigned است. [/SIZE][/FONT]
[FONT=Arial][SIZE=2]float : نوع اعشاري با single precision . [/SIZE][/FONT]
[SIZE=2][FONT=Arial]double : نوع اعشاري با double precision . مثال : [/FONT][/SIZE]

[FONT=Arial][SIZE=2]float val = 1.23f; [/SIZE][/FONT]

[FONT=Arial][SIZE=2]bool : نوع داده ايي Boolean كه مي تواند true و يا false باشد. مثال : [/SIZE][/FONT]

[FONT=Arial][SIZE=2]Bool val = true; [/SIZE][/FONT]

[FONT=Arial][SIZE=2]char : كاراكتر، دراينجا char يك كاراكتر يونيكد است. [/SIZE][/FONT]

[FONT=Arial][SIZE=2]char val = 'h'; [/SIZE][/FONT]

[FONT=Arial][SIZE=2]به نحوه ي تعريف كاراكتر ها و همچنين رشته ها در سي شارپ دقت كنيد. [/SIZE][/FONT]
[FONT=Arial][SIZE=2]decimal : نوع داده ايي دسيمال با 28 رقم معني دار. [/SIZE][/FONT]

[FONT=Arial][SIZE=2]decimal val = 1.23M; [/SIZE][/FONT]

[SIZE=2][FONT=Arial][B]يك نكته :[/B] [/FONT][/SIZE]
[FONT=Arial][SIZE=2]- بهتر است هنگام تعريف يك متغير ، نامي با مسما براي آن انتخاب شود تا در هنگام كار خواندن كد ساده تر گردد. همچنين رسم شده است كه نوع متغير را به صورت خلاصه به نام متغير اضافه مي كنند. براي مثال بجاي FirstName بهتر است بنويسيم strFirstName . به اين نوع نگارش Hungarian notation مي گويند. [/SIZE][/FONT]
[SIZE=2][FONT=Arial]- تمام نوع هاي پيش فرض تعريف شده در سي شارپ شيء هستند. در آينده بيشتر در اين مورد صحبت خواهيم كرد. [/FONT][/SIZE]
[FONT=Arial][SIZE=2]مثال اين قسمت : [/SIZE][/FONT]
[FONT=Arial][SIZE=2]يك برنامه ي console جديد در را VS.NET باز كنيد. نام آنرا در ابتدا ex02 انتخاب نماييد. در اينجا مي خواهيم دو متغير رشته ايي و صحيح را تعريف و سپس در خروجي نمايش دهيم. [/SIZE][/FONT]
[SIZE=2][FONT=Arial][B]كد نهايي به صورت زير مي باشد:[/B] [/FONT][/SIZE]

[FONT=Arial][SIZE=2]using System; [/SIZE][/FONT]
[FONT=Arial][SIZE=2]namespace ex02 [/SIZE][/FONT]
[SIZE=2][FONT=Arial]{ [/FONT][/SIZE]
[SIZE=2][FONT=Arial]/// [/FONT][/SIZE]
[SIZE=2][FONT=Arial]/// Summary description for Class1. [/FONT][/SIZE]
[SIZE=2][FONT=Arial]/// [/FONT][/SIZE]
[SIZE=2][FONT=Arial]class Class1 [/FONT][/SIZE]
[SIZE=2][FONT=Arial]{ [/FONT][/SIZE]
[SIZE=2][FONT=Arial]/// [/FONT][/SIZE]
[SIZE=2][FONT=Arial]/// The main entry point for the application. [/FONT][/SIZE]
[SIZE=2][FONT=Arial]/// [/FONT][/SIZE]
[SIZE=2][FONT=Arial][STAThread] [/FONT][/SIZE]
[SIZE=2][FONT=Arial]static void Main(string[] args) [/FONT][/SIZE]
[SIZE=2][FONT=Arial]{ [/FONT][/SIZE]
[SIZE=2][FONT=Arial]int intVar1 = 0; [/FONT][/SIZE]
[FONT=Arial][SIZE=2]int intVar2; [/SIZE][/FONT]
[SIZE=2][FONT=Arial]intVar2=1; [/FONT][/SIZE]
[FONT=Arial][SIZE=2]int intV3=15 , intV4 = 12; [/SIZE][/FONT]
[FONT=Arial][SIZE=2]string strText1 = "abcd"; [/SIZE][/FONT]
[FONT=Arial][SIZE=2]Console.WriteLine( [/SIZE][/FONT]
[SIZE=2][FONT=Arial]"The value for variables are : \n intVar1="+intVar1 + [/FONT][/SIZE]
[SIZE=2][FONT=Arial]"\n intVar2="+ intVar2 + [/FONT][/SIZE]
[SIZE=2][FONT=Arial]"\n intV3=" + intV3 + [/FONT][/SIZE]
[SIZE=2][FONT=Arial]"\n intV4=" + intV4 + [/FONT][/SIZE]
[SIZE=2][FONT=Arial]"\n strText1=" + strText1); [/FONT][/SIZE]
[FONT=Arial][SIZE=2]Console.WriteLine("\n\n Press any key to terminate"); [/SIZE][/FONT]
[SIZE=2][FONT=Arial]Console.ReadLine(); // pause screen! [/FONT][/SIZE]
[FONT=Arial][SIZE=2]} [/SIZE][/FONT]
[SIZE=2][FONT=Arial]} } [/FONT][/SIZE]

[SIZE=2][FONT=Arial][B]نكاتي در مورد كد فوق:[/B] [/FONT][/SIZE]
[FONT=Arial][SIZE=2]- بك اسلش ان ، در زبانهاي مشتق شده از سي به معناي new line مي باشد. [/SIZE][/FONT]
[SIZE=2][FONT=Arial]- در كد فوق نحوه ي تعريف چند متغير در يك خط و حالتهاي مقدار دهي مختلف را ملاحظه مي كنيد. [/FONT][/SIZE]
[SIZE=2][FONT=Arial]- از متد ReadLine براي نگه داشتن خروجي و مشاهده ي آن در اينجا استفاده كرديم. [/FONT][/SIZE]
[SIZE=2][FONT=Arial]- عادت كنيد به صورت دندانه دار كد بنويسيد. اينكار خوانايي كد را صد برابر مي كند. در اينجا كدهاي داخل متد main ، كاملا چند دندانه از آكولادهاي باز و بسته كردن آن جلو تر هستند. [/FONT][/SIZE]
[SIZE=2][FONT=Arial]- در كد بالا در متد WriteLine اعداد و رشته ها با هم جمع شده اند! اين مورد بدليل وجود overload هاي زياد اين تابع و ... ميسر گشته است. اصلا به آن دل نبنديد! چون در آينده كامپايلر سي شارپ اگر چنين اعمالي را در جاهاي ديگري مرتكب شويد به شدت با شما برخورد خواهد كرد!! براي جمع كردن اعداد با رشته ها حتما بايد عدد به رشته تبديل گردد و بعد ... . در اين مورد در مقالات بعدي بحث خواهد گرديد. [/FONT][/SIZE]
  پاسخ با نقل قول

مقدمه اي بر سي شارپ : قسمت دوم
قدیمی 12-02-2008, 01:08 PM   #3 (permalink)

کاربر آخر فروم باز

 B@RBOD آواتار ها

 
تاریخ عضویت: Oct 2008
سن: 22
نوشته ها: 3,263
سپاس ها: 21
سپاس شده 408 در 349 پست
حالت من:
درجه: 44 [♥ Bé-Yêu ♥♥ Bé-Yêu ♥♥ Bé-Yêu ♥♥ Bé-Yêu ♥♥ Bé-Yêu ♥]
سابقه: 542 / 1084
سحر و جادو: 1087 / 5682
تجربه: 37%

Rep Power: 5 B@RBOD is on a distinguished road
Post مقدمه اي بر سي شارپ : قسمت دوم

[SIZE=2][FONT=Arial][B]مقدمه :[/B] [/FONT][/SIZE]
[FONT=Arial][SIZE=2]در اين قسمت مي خواهيم با يك سري از اصول اوليه ي شيء گرايي در سي شارپ كمي آشنا شويم. لازم به ذكر است ، بسياري از مواردي كه در اين قسمت مطرح مي شوند فقط براي آشنايي شما است و در آينده بيشتر بحث و مرور خواهند شد. [/SIZE][/FONT]
[SIZE=2][FONT=Arial][B]آشنايي با فضاهاي نام (NameSpaces) :[/B] [/FONT][/SIZE]
[FONT=Arial][SIZE=2]فضاهاي نام روشي براي مديريت كد نويسي هستند. براي مثال آنها ايجاد شده اند تا تداخلي بين نام هاي توابع در برنامه شما رخ ندهد. اين مساله در پروژه هاي بزرگ خود را نشان مي دهد و ممكن است دو آيتم در يك پروژه نام هاي يكساني را پيدا كنند. بدين وسيله اين شانس تصادم و تداخل كاهش پيدا مي كند. براي ايجاد يك فضاي نام به صورت زير عمل مي شود: [/SIZE][/FONT]
[FONT=Arial][SIZE=2] [/SIZE][/FONT]
[FONT=Arial][SIZE=2]namespace anyName
{
…….. [/SIZE][/FONT]
[FONT=Arial][SIZE=2]Class anyClassName
{
……….
} [/SIZE][/FONT]
[FONT=Arial][SIZE=2]……. [/SIZE][/FONT]
[FONT=Arial][SIZE=2]} [/SIZE][/FONT]
[FONT=Arial][SIZE=2] [/SIZE][/FONT]
[FONT=Arial][SIZE=2]يكي از فضاهاي نام پايه اي در دات نت فريم ورك ، فضاي نام System مي باشد. براي استفاده از آن مي توان از كد زير كمك گرفت : [/SIZE][/FONT]

[FONT=Arial][SIZE=2]using System; [/SIZE][/FONT]

[FONT=Arial][SIZE=2]تمام فضاهاي نام به صورت پيش فرض public مي باشند و در خارج از كد شما قابل دسترسي هستند. روش استفاده از آنها به صورت زير است: [/SIZE][/FONT]

[FONT=Arial][SIZE=2]ProjectName.NameSpace.ClassName.MemberName [/SIZE][/FONT]

[SIZE=2][FONT=Arial][B]نكته :
[/B]اگر دقت كرده باشيد هنگامي كه كرسر ماوس را روي هر آيتمي در منوي autocomplete نگه مي داريد و يا آنرا انتخاب مي كنيد يك راهنماي كوچك نمايش داده مي شود كه در حقيقت كامنت مربوط به آن تابع مي باشد. روش نوشتن چنين كامنت حرفه اي كه در منوهاي ويژوال استوديو ظاهر شود به صورت زير است كه بهتر است (!) قبل از هر تابع يا خاصيت يا كلاس و .... نوشته شود [/FONT][/SIZE]

[FONT=Arial][SIZE=2]///
///
///
/// [/SIZE][/FONT]

[SIZE=2][FONT=Arial][B]كلاس ها :[/B] [/FONT][/SIZE]
[FONT=Arial][SIZE=2]چون سي شارپ تمام سر و كارش با كلاس ها است بنابراين بايد در مورد نحوه ي تعريف و استفاده از آنها تسلط كافي داشته باشيم. [/SIZE][/FONT]
[FONT=Arial][SIZE=2]يك پروژه ي جديد console در VS.NET باز كنيد و نام آنرا در ابتدا ex03 وارد نماييد.
بعد از باز شدن پروژه ، از منوي Project گزينه ي Add class را انتخاب كنيد تا كلاسي جديد به نام clsDate.cs را اضافه نماييم. ساختار فايل ايجاد شده توسط VS.NET به صورت زير است : [/SIZE][/FONT]

[FONT=Arial][SIZE=2]using System; [/SIZE][/FONT]
[FONT=Arial][SIZE=2]namespace ex03
{
///
/// Summary description for clsDate.
///
public class clsDate
{
public clsDate()
{
//
// TODO: Add constructor logic here (chashm!)
//
}
}
} [/SIZE][/FONT]

[FONT=Arial][SIZE=2]تابع يا متد clsDate كه در اينجا به صورت پيش فرض ايجاد شده است اصطلاحا سازنده (constructor) نام دارد. اين تابع هر بار كه يك شيء جديد از كلاس مي سازيم به صورت خودكار اجرا مي شود. [/SIZE][/FONT]
[FONT=Arial][SIZE=2]از اين كلاس مي خواهيم براي نمايش تاريخ/ ساعت و غيره استفاده كنيم. [/SIZE][/FONT]
[FONT=Arial][SIZE=2]براي مثال مي خواهيم تاريخ جاري سيستم را به صورت يك خاصيت از اين كلاس دريافت كنيم. براي اين منظور كد زير را به برنامه اضافه مي نماييم: [/SIZE][/FONT]

[FONT=Arial][SIZE=2]public string currentSystemDate
{
get
{
return System.DateTime.Today.ToString() ;
}
} [/SIZE][/FONT]

[SIZE=2][FONT=Arial][B]توضيح كد فوق :[/B] [/FONT][/SIZE]
[FONT=Arial][SIZE=2]خاصيتي را كه مي خواهيم از برنامه دريافت كنيم با كلمه ي كليدي get معرفي مي نماييم. هر چيزي كه اين قسمت برگرداند خروجي currentSystemDate خواهد بود. اين دستور زبان كه در بالا معرفي شد استاندارد است و در همه جا به يك صورت تعريف و بكار برده مي شود. پس شكل آنرا به خاطر بسپاريد.
از كلمه ي كليدي return براي برگرداندن يك خروجي از خاصيت و يا تابع استفاده مي شود. [/SIZE][/FONT]
[FONT=Arial][SIZE=2]براي استفاده از اين خاصيت جديد ، در فايل Class1.cs كه متد main برنامه ي ما در آنجا قرار دارد به صورت زير عمل مي كنيم : [/SIZE][/FONT]

[FONT=Arial][SIZE=2]clsDate m_var = new clsDate(); // initialize variable
Console.WriteLine ( m_var.currentSystemDate );
Console.ReadLine();//pause! [/SIZE][/FONT]

[SIZE=2][FONT=Arial][B]توضيح كد فوق :[/B] [/FONT][/SIZE]
[FONT=Arial][SIZE=2]براي استفاده از يك كلاس بايد يك متغير از آن را تعريف كنيم. در هر زباني يك سري نوع هاي استاندارد مانند int و string و غيره وجود دارند. كلاس هم در حقيقت يك نوع داده ي بسيار بسيار قدرتمند به شمار مي آيد. براي تعريف يك متغير از نوع جديد روش كار مانند سابق است. براي مثال زماني كه يك متغير عدد صحيح را تعريف مي كنيد به صورت زير عمل مي شود : [/SIZE][/FONT]

[FONT=Arial][SIZE=2]int i=0; [/SIZE][/FONT]

[FONT=Arial][SIZE=2]راي تعريف يك متغير از نوع داده اي كه خودمان تعريف كرده ايم نيز بايد به همين صورت عمل شود. [/SIZE][/FONT]

[FONT=Arial][SIZE=2]clsDate m_var = new clsDate(); [/SIZE][/FONT]

[FONT=Arial][SIZE=2]از كلمه ي كليدي new اينجا به صورت استاندارد براي مقدار دهي اوليه به اين متغير جديد استفاده مي نماييم. [/SIZE][/FONT]
[FONT=Arial][SIZE=2]سپس به روش دستيابي به اين خاصيتي كه به كلاس اضافه كرده ايم مي رسيم. [/SIZE][/FONT]

[FONT=Arial][SIZE=2]m_var.currentSystemDate [/SIZE][/FONT]

[FONT=Arial][SIZE=2]كلا چه يك خاصيت و يا يك متد را به كلاس اضافه نماييم براي دستيابي به آن از عملگر نقطه پس از ذكر نام متغير تعريف شده از نوع كلاس خود ، استفاده مي نماييم. براي استفاده از خاصيت ها نيازي به آوردن () بعد از ذكر نام خاصيت نمي باشد. [/SIZE][/FONT]
[FONT=Arial][SIZE=2]عموما از خاصيت ها براي برگرداندن و يا تنظيم يك مقدار ساده استفاده مي شود و در آنها عمليات پيچيده اي مد نظر نمي باشد. [/SIZE][/FONT]
[FONT=Arial][SIZE=2]توضيحي در مورد ; () System.DateTime.Today.ToString
استفاده از خواص : [/SIZE][/FONT]
[FONT=Arial][SIZE=2]شما به ويژگي هاي يك شيء با استفاده از خواص آن مي توانيد دسترسي پيدا كنيد. يك property عضوي است كه امكان دسترسي به ويژگي شيء يا كلاس را فراهم مي كند. براي مثال طول يك رشته (string) ، سايز يك فونت ، عنوان يك فرم و نام يك مصرف كننده ، خاصيت هستند . [/SIZE][/FONT]
[FONT=Arial][SIZE=2]بسياري از اشياء ذاتي دات نت فريم ورك ، خواص مفيد زيادي را به همراه دارند. براي مثال شيء DateTime را در نظر بگيريد. با استفاده از خاصيت Today آن مي توان تاريخ جاري سيستم را بدست آورد. براي استفاده از يك خاصيت لازم است تا كلاس تعريف كننده شيء در برنامه مهيا باشد. منظور همان استفاده از فضاي نام مربوطه مي باشد. پس از وارد كردن فضاي نام كلاس مورد نظر مي توانيد از شيء و خواص آن استفاده كنيد. دو راه وجود دارد يا به صورت كامل تمام موارد بايد ذكر شوند مانند System.DateTime.Now; و يا با وارد كردن فضاي نام System كوتاه سازي صورت مي گيرد. [/SIZE][/FONT]
[FONT=Arial][SIZE=2]براي استفاده از هر متد و يا شيء ايي در سي شارپ بايد اين شيء قابل دسترسي باشد. براي مثال شيء Console كه از آن براي چاپ كردن خروجي بر روي صفحه ي نمايش استفاده مي كنيم در فضاي نام System واقع شده است. يا بايد در ابتداي برنامه ذكر كرد using System ; و سپس خيلي راحت از اين شيء استفاده كرد و يا مي توان اينكار را انجام نداد و نوشت : System.Console و الي آخر. با ذكر فضاي نام در ابتدا با استفاده از using مي توان خلاصه نويسي كرد. [/SIZE][/FONT]
[FONT=Arial][SIZE=2]نتيجه ي نهايي مثال اين فصل : [/SIZE][/FONT]
[FONT=Arial][SIZE=2]محتويات فايل Class1.cs :[/SIZE][/FONT]

[FONT=Arial][SIZE=2]using System; [/SIZE][/FONT]
[FONT=Arial][SIZE=2]namespace ex03
{
///
/// Summary description for Class1.
///
class Class1
{
///
/// The main entry point for the application.
///
[STAThread]
static void Main(string[] args)
{
clsDate m_var = new clsDate(); // initialize variable
Console.WriteLine ( m_var.currentSystemDate ); [/SIZE][/FONT]
[FONT=Arial][SIZE=2]Console.ReadLine();//pause!
}
}
} [/SIZE][/FONT]

[FONT=Arial][SIZE=2]محتويات فايل clsDate.cs كه به برنامه اضافه كرديم: [/SIZE][/FONT]

[FONT=Arial][SIZE=2]using System; [/SIZE][/FONT]
[FONT=Arial][SIZE=2]namespace ex03
{
///
/// Summary description for clsDate.
///
public class clsDate
{
public clsDate()
{
//
// TODO: Add constructor logic here
//
} [/SIZE][/FONT]
[FONT=Arial][SIZE=2]public string currentSystemDate
{
get
{
return System.DateTime.Today.ToString() ;
}
} [/SIZE][/FONT]

[FONT=Arial][SIZE=2]}
} [/SIZE][/FONT]
[FONT=Arial][SIZE=2] [/SIZE][/FONT]
  پاسخ با نقل قول

مقدمه اي بر سي شارپ : قسمت سوم
قدیمی 12-02-2008, 01:09 PM   #4 (permalink)

کاربر آخر فروم باز

 B@RBOD آواتار ها

 
تاریخ عضویت: Oct 2008
سن: 22
نوشته ها: 3,263
سپاس ها: 21
سپاس شده 408 در 349 پست
حالت من:
درجه: 44 [♥ Bé-Yêu ♥♥ Bé-Yêu ♥♥ Bé-Yêu ♥♥ Bé-Yêu ♥♥ Bé-Yêu ♥]
سابقه: 542 / 1084
سحر و جادو: 1087 / 5682
تجربه: 37%

Rep Power: 5 B@RBOD is on a distinguished road
Post مقدمه اي بر سي شارپ : قسمت سوم

[FONT=Arial][SIZE=2][B]ساختارهاي تصميم گيري :[/B] [/SIZE][/FONT]
[FONT=Arial][SIZE=2]در بسياري از موارد هنگام برنامه نويسي لازم است تا از عبارات شرطي استفاده كنيم. براي انجام اينكار دو روش عمده وجود دارد. استفاده از if و يا switch . از if بيشتر براي مقايسه هايي تكي و كوچك استفاده مي شود و حاصل مقايسه ي آن يا true است و يا false . از عبارت switch هنگامي استفاده مي شود كه مقايسه هاي متعددي بايد در مورد يك مقدار صورت گيرد.
هر دو عبارت if و switch توسط عبارتهايي Boolean كنترل مي شوند ( true و يا false ) . در هنگام استفاده از if اگر عبارت Boolean حاصل اش true باشد اولين قسمت شرط اجرا مي شود و سپس برنامه از انتهاي if ادامه پيدا مي كند. اگر حاصل عبارت Boolean مساوي false باشد كنترل برنامه به قسمت else منتقل مي شود. [/SIZE][/FONT]
[FONT=Arial][SIZE=2]مثال : [/SIZE][/FONT]
[FONT=Arial][SIZE=2]يك پروژه ي جديد console باز كنيد و نام آنرا ex04 بگذاريد. سپس كد زير را در آن وارد و جرا كنيد : [/SIZE][/FONT]

[FONT=Arial][SIZE=2]using System; [/SIZE][/FONT]
[FONT=Arial][SIZE=2]namespace ex04
{
class Class1
{
[STAThread]
static void Main(string[] args)
{
Console.WriteLine("Enter 1 character to be evaluated"); [/SIZE][/FONT]
[FONT=Arial][SIZE=2]char cUserInput = (char) Console.Read(); [/SIZE][/FONT]
[FONT=Arial][SIZE=2]if ( char.IsDigit( cUserInput ) )
Console.WriteLine("The char is a number!");
else
Console.WriteLine("The char is not a number!"); [/SIZE][/FONT]
[FONT=Arial][SIZE=2]}
}
} [/SIZE][/FONT]

[B][FONT=Arial][SIZE=2]نكاتي در مورد كد فوق : [/SIZE][/FONT][/B]
[FONT=Arial][SIZE=2]1- سي شارپ به كوچكي و بزرگي حروف حساس است . براي مثال cUserInput با cUserinput فرق مي كند.
2- حتما بايد بعد از if پرانتزها ذكر گردد.
3- حتما بايد داخل if يك عبارت Boolean ذكر شود مانند if(x>5) .
4- در سي شارپ مقايسه ي تساوي دو عبارت با == و انتساب با = انجام مي شود. ( موارد 1 و 4 مواردي هستند كه اغلب تازه كاران با آن مشكل دارند! ) براي مثال if(i==3) صحيح است اما if(i=3) در سي شارپ معنايي ندارد.
5- اگر بعد از if يك خط كد قرار گيرد نيازي به آوردن آكولاد ها نيست. هنگامي نياز به آكولادها مي باشد كه بيش از يك خط بايد بعد از if قرار گيرد.
6- در سي شارپ همانند اسلاف خودش براي تبديل نوع هاي داده ايي مي توان به صورت زير نيز عمل كرد : (char) Console.Read() ; يعني دريافتي Read به char تبديل مي شود .در اين مورد باز هم صحبت خواهد شد.
7- همانطور كه ذكر شد در سي شارپ همه چيز شيء است حتي نوع هاي پايه ايي مانند char . با استفاده از متد IsDigit آن مي توان چك كرد كه آيا ورودي آن عدد است يا خير؟ ( در مورد متدها صحبت خواهد شد ) [/SIZE][/FONT]
[FONT=Arial][SIZE=2][B]استفاده از switch :[/B] [/SIZE][/FONT]
[FONT=Arial][SIZE=2]بهتر است اين مورد را با يك مثال دنبال كنيم.
پروژه ي سي شارپ جديدي به نام ex05 در حالت console در VS.NET باز كنيد. دراينجا مي خواهيم يك كلاس جديد تعريف كرده و توسط خاصيتي كه در آن ايجاد مي كنيم متوجه شويم روز جاري مطابق سيستم چه روزي است .
يك كلاس جديد از منوي پروژه ،‌با استفاده از گزينه ي Add class به برنامه اضافه كنيد و نام آنرا در ابتدا clsDate بگذاريد. [/SIZE][/FONT]

[FONT=Arial][SIZE=2]using System; [/SIZE][/FONT]
[FONT=Arial][SIZE=2]namespace ex05
{
///
/// Summary description for clsDate.
///
public class clsDate
{
public clsDate()
{
//
// TODO: Add constructor logic here
//
} [/SIZE][/FONT]
[FONT=Arial][SIZE=2]public string systemDayOfWeek
{
get
{ [/SIZE][/FONT]
[FONT=Arial][SIZE=2]string res="";
switch( System.DateTime.Now.DayOfWeek.ToString())
{
case "Saturday" :
res = "شنبه";
break; [/SIZE][/FONT]
[FONT=Arial][SIZE=2]case "Sunday" :
res = "يک شنبه" ;
break; [/SIZE][/FONT]
[FONT=Arial][SIZE=2]case "Monday":
res = "دوشنبه";
break; [/SIZE][/FONT]
[FONT=Arial][SIZE=2]case "Tuesday":
res = "سه شنبه";
break; [/SIZE][/FONT]
[FONT=Arial][SIZE=2]case "Wednesday":
res = "چهار شنبه";
break; [/SIZE][/FONT]
[FONT=Arial][SIZE=2]case "Thursday":
res = "پنج شنبه";
break; [/SIZE][/FONT]
[FONT=Arial][SIZE=2]case "Friday":
res = "جمعه" ;
break;
} [/SIZE][/FONT]
[FONT=Arial][SIZE=2]return res ;
} [/SIZE][/FONT]
[FONT=Arial][SIZE=2]} [/SIZE][/FONT]

[FONT=Arial][SIZE=2]}
} [/SIZE][/FONT]

[FONT=Arial][SIZE=2]هنگام ذخيره كردن اين كد ويژوال استوديو به شما اخطار مي دهد كه كد داراي حروف يونيكد است. از منوي فايل گزينه ي advanced save options را انتخاب كنيد. در اينجا مي توان نوع ذخيره سازي را يونيكد انتخاب كرد. [/SIZE][/FONT]
[FONT=Arial][SIZE=2]براي استفاده از كلاس فوق مانند مطالبي كه در قسمت قبل گفته شد عمل مي كنيم : [/SIZE][/FONT]

[FONT=Arial][SIZE=2]using System; [/SIZE][/FONT]
[FONT=Arial][SIZE=2]namespace ex05
{
class Class1
{
[STAThread]
static void Main(string[] args)
{
clsDate m_var = new clsDate();
Console.WriteLine( m_var.systemDayOfWeek );
Console.ReadLine(); [/SIZE][/FONT]
[FONT=Arial][SIZE=2]}
}
} [/SIZE][/FONT]

[FONT=Arial][SIZE=2]هر چند حالت console يونيكد را پشتيباني نمي كند ولي اصل برنامه براي ما مهم است و در آينده بيشتر از آن استفاده خواهيم كرد. [/SIZE][/FONT]
[FONT=Arial][SIZE=2]همانطور كه ملاحظه كرديد اگر از switch استفاده نمي شد بايد از 7 عدد if ‌استفاده مي گرديد كه اصلا ظاهر حرفه اي و شكيلي نداشت!
با استفاده از عبارت زير كار مقايسه شروع مي شود. روز سيستم در يافت شده و وارد بدنه ي switch مي گردد. سپس توسط case ها چك مي شود تا تساوي آن با عبارت بعد از case به اثبات برسد. [/SIZE][/FONT]

[FONT=Arial][SIZE=2]switch( System.DateTime.Now.DayOfWeek.ToString()) [/SIZE][/FONT]

[FONT=Arial][SIZE=2]اگر هر كدام از عبارات بعد از case صحيح بودند كار پس از آن كه در اينجا انتساب است انجام شده و سپس توسط break كنترل برنامه از switch خارج مي شود و ادامه ي كار دنبال مي گردد.
اگر هيچكدام از case ها صحيح نبودند مي توان از گزينه ي default هم در صورت نياز استفاده كرد. اين حالت در يك چنين مواقعي اجرا مي گردد.
[/SIZE][/FONT]
  پاسخ با نقل قول

مقدمه اي بر سي شارپ : قسمت چهارم
قدیمی 12-02-2008, 01:10 PM   #5 (permalink)

کاربر آخر فروم باز

 B@RBOD آواتار ها

 
تاریخ عضویت: Oct 2008
سن: 22
نوشته ها: 3,263
سپاس ها: 21
سپاس شده 408 در 349 پست
حالت من:
درجه: 44 [♥ Bé-Yêu ♥♥ Bé-Yêu ♥♥ Bé-Yêu ♥♥ Bé-Yêu ♥♥ Bé-Yêu ♥]
سابقه: 542 / 1084
سحر و جادو: 1087 / 5682
تجربه: 37%

Rep Power: 5 B@RBOD is on a distinguished road
Post مقدمه اي بر سي شارپ : قسمت چهارم

[FONT=Arial][SIZE=2][B]آرايه ها در سي شارپ :[/B] [/SIZE][/FONT]
[FONT=Arial][SIZE=2]هنگامي آرايه ها ايجاد مي شوند كه بخواهيم با مجموعه اي از اطلاعات همجنس كار كنيم. براي نمونه از يك آرايه براي ذخيره تعدادي كاراكتر مي خواهيم استفاده نماييم. آرايه ها هم يك نوع متغير هستند پس بايد تعريف و مقدار دهي اوليه شوند ، نوع و تعداد اعضاي آنها نيز بايد معين گردد.
فرض كنيد 10 داده ي هم جنس داريم ( براي مثال رشته (string) ) و مي خواهيم آنها را ذخيره كنيم. يا مي توان 10 متغير مختلف را تعريف كرد و سپس تك تك آنها را مقدار دهي نمود و يا يك آرايه تعريف نمود و سپس در خانه هاي مختلف آن اين ده عضو را چيد. اين مطلب زماني حائز اهميت مي شود كه داده هاي همجنس و به نوعي مرتبط ما تعداد زيادي داشته باشند. [/SIZE][/FONT]
[FONT=Arial][SIZE=2][B]براي تعريف آرايه چندين راه مختلف وجود دارد :
[/B]براي تعريف آرايه ابتدا نوع آنرا مشخص مي كنيد سپس [] را بايد جلوي تعريف نوع بگذاريد اين دستور زبان است و چون چرا ندارد! در زبان سي كمي متفاوت بود. اين كروشه ها بعد از نام متغير مي آمدند. و سپس در اينجا نام يك متغير را كه بعدا به آن ارجا مي دهيم خواهيد گذاشت. براي مثال [/SIZE][/FONT]
[FONT=Arial][SIZE=2] [/SIZE][/FONT]
[FONT=Arial][SIZE=2]int[] table; // not int table[]; [/SIZE][/FONT]
[FONT=Arial][SIZE=2] [/SIZE][/FONT]
[FONT=Arial][SIZE=2]حد پايين آرايه صفر بوده براي مثال اگر آرايه chrData[] ده عضو داشته باشد، اولين عضو آن chrData[0] و آخرين عضو آن chrData[9] است.
مطلب ديگري كه در مورد آرايه ها خيلي مهم است اندازه ي آن است. يعني يك آرايه حاوي چند خانه ي خالي است كه ما اجازه داريم آنرا پر كنيم. مثال : [/SIZE][/FONT]
[FONT=Arial][SIZE=2] [/SIZE][/FONT]
[FONT=Arial][SIZE=2]int[] numbers; // declare numbers as an int array of any size
numbers = new int[10]; // numbers is a 10-element array
numbers = new int[20]; // now it's a 20-element array [/SIZE][/FONT]

[FONT=Arial][SIZE=2]1- تعريف آرايه اي از رشته ها و مقدار دهي اوليه آن. [/SIZE][/FONT]
[FONT=Arial][SIZE=2] [/SIZE][/FONT]
[FONT=Arial][SIZE=2]String[] strData = new string[2]; [/SIZE][/FONT]

[FONT=Arial][SIZE=2]2- تعريف و مقدار دهي اوليه [/SIZE][/FONT]
[FONT=Arial][SIZE=2] [/SIZE][/FONT]
[FONT=Arial][SIZE=2]string [] strData = { "1234","abcd" }; [/SIZE][/FONT]

[FONT=Arial][SIZE=2]كه آرايه اي از نوع رشته اي به طول 2 عضو با مقدار دهي اوليه ايجاد شده است. در اين حالت نيازي به تعيين طول آن نمي باشد. [/SIZE][/FONT]
[FONT=Arial][SIZE=2]3- روشي ديگر براي مقدار دهي اوليه [/SIZE][/FONT]
[FONT=Arial][SIZE=2] [/SIZE][/FONT]
[FONT=Arial][SIZE=2]strData[0] = "1234";
strData[1] = "abcd"; [/SIZE][/FONT]

[FONT=Arial][SIZE=2]مثال : يك پروژه ي جديد Console سي شارپ را باز كنيد و نام آنرا در ابتدا ex06 بگذاريد. در اين مثال مي خواهيم نحوه ي كار با آرايه ها را مرور كنيم :[/SIZE][/FONT]
[FONT=Arial][SIZE=2] [/SIZE][/FONT]
[FONT=Arial][SIZE=2]using System; [/SIZE][/FONT]
[FONT=Arial][SIZE=2]namespace ex06
{
class Class1
{
[STAThread]
static void Main(string[] args)
{
string[] sGoalList = new string[3];
string sReplyStatement = "You have choosen Goal '"; [/SIZE][/FONT]
[FONT=Arial][SIZE=2]// Store goals in the array
sGoalList[0] = "Hike the Appalachian Trail";
sGoalList[1] = "Run the marathon";
sGoalList[2] = "Give $1 million to worthwhile causes"; [/SIZE][/FONT]
[FONT=Arial][SIZE=2]// Store response to goals in the array
//(declaring and initializing on same line)
string[] sGoalResponse = {
"If you are staring from GA, you should get "
+ "started in early spring, so you will "+
"not get caught in snow.",
"Make sure that you have a good pair of shoes.",
"Start saving as soon as possible."}; [/SIZE][/FONT]
[FONT=Arial][SIZE=2]// Give the user a list of goals to choose from
Console.WriteLine("GOAL LIST"); [/SIZE][/FONT]
[FONT=Arial][SIZE=2]for(int i = 0; i < sGoalList.Length; i++)
{
Console.WriteLine("Goal " + i +
" - " + sGoalList[i]);
} [/SIZE][/FONT]

[FONT=Arial][SIZE=2]// Request the user to choose a goal.
Console.WriteLine (""); // Write an empty line for space
Console.Write("Please choose the number of the "
+ "goal that you want to achieve [0,1,2]: "); [/SIZE][/FONT]
[FONT=Arial][SIZE=2]Console.ReadLine(); [/SIZE][/FONT]
[FONT=Arial][SIZE=2]}
}
} [/SIZE][/FONT]

[FONT=Arial][SIZE=2][B]نكاتي در مورد كد فوق :[/B]
1- نحوه ي استفاده از عملگر + را براي اتصال رشته هاي بلند در كد فوق مي توان ديد.
2- در سي شارپ پايان خط سمي كولون مي باشد. بنابراين نگراني در مورد چند خطي شدن يك دستور وجود ندارد.
3- هنگامي كه آرايه اي را با مقادير درون آكولادها ، مقدار دهي اوليه مي كنيد لزومي ندارد طول آن آرايه را مشخص كنيد ؛ مانند آرايه sGoalResponse در بالا. در غير اينصورت حتما بايد طول يك آرايه را كه معرف تعداد خانه هاي خالي آن است ، معرفي كنيد مانند آرايه sGoalList .
4- فعلا حلقه ي for را در اين مثال بخاطر داشته باشيد تا در مقاله ي بعدي راجع به آن صحبت كنيم
[/SIZE][/FONT]
  پاسخ با نقل قول

مقدمه اي بر سي شارپ : قسمت پنجم
قدیمی 12-02-2008, 01:11 PM   #6 (permalink)

کاربر آخر فروم باز

 B@RBOD آواتار ها

 
تاریخ عضویت: Oct 2008
سن: 22
نوشته ها: 3,263
سپاس ها: 21
سپاس شده 408 در 349 پست
حالت من:
درجه: 44 [♥ Bé-Yêu ♥♥ Bé-Yêu ♥♥ Bé-Yêu ♥♥ Bé-Yêu ♥♥ Bé-Yêu ♥]
سابقه: 542 / 1084
سحر و جادو: 1087 / 5682
تجربه: 37%

Rep Power: 5 B@RBOD is on a distinguished road
Post مقدمه اي بر سي شارپ : قسمت پنجم

[FONT=Arial][SIZE=2]حلقه ها در سي شارپ :

[B]مقدمه :[/B]

اگر نياز باشد تا قطعه اي از كد بيش از يكبار اجرا شود نياز به استفاده از حلقه ها مي باشد. براي مثال فرض كنيد آرايه اي به طول 1000 تعريف كرده ايد. اكنون مي خواهيد آنرا با هزار عدد متوالي پركنيد. بديهي است كه روش زير كارآمد نيست! :

[/SIZE][/FONT]
[FONT=Arial][SIZE=2]int[] intData = new int[1000];
intData[0]=0;
.
.
.
intData[999]=1000;

[/SIZE][/FONT]
[FONT=Arial][SIZE=2]نوشتن اين خطوط متوالي احتمالا با كپي و پيست و اصلاح آن حداقل نيم ساعت طول مي كشد! بنابراين نياز به وسيله اي حس مي شود كه بتوان بوسيله ي آن امثال اينگونه كارها را انجام داد.

تعريف حلقه ها و استفاده از آنها :

براي تعريف حلقه ها ابزارهاي متعددي مانند while, do , for , foreach وجود دارند. استفاده و انتخاب آنها بستگي به سليقه ي شما و منطق برنامه دارد. در هر حال يك مساله بديهي است كه همواره بيش از يك راه حل براي يك مساله وجود خواهد داشت.

استفاده از حلقه ي for :

عموما كدنويسي را با كد نويسي مي توان آموخت! بنابراين در مورد انواع حلقه ها مثالهايي ارائه خواهد گرديد.

يك برنامه ي سي شارپ جديد console را در VS.NET باز كنيد و نام آنرا درابتدا ex07 انتخاب نماييد. سپس كد زير را درون آن بنويسيد :

[/SIZE][/FONT]
[FONT=Arial][SIZE=2]using System;

namespace ex07
{
class Class1
{
[STAThread]
static void Main(string[] args)
{
int[] intData = new int[1000];

for (int i=0 ; i<1000 ; i++ )
intData[i]=i;


for(int i=0 ; i< intData.Length ; i++)
{
int j = intData[i];
Console.WriteLine("intData[" + i + "]=" + j);
}

Console.ReadLine();

}
}
}

[/SIZE][/FONT]
[FONT=Arial][SIZE=2]توضيحاتي در مورد كد فوق :
1- براي تعريف حلقه ي for همانطور كه مي بينيد بايد تعداد بار اجراي حلقه ( اينجا از 0 تا 999 است ) و همچنين نحوه ي رسيدن از 0 به 1000 را مشخص كرد ( در اينجا i++ است يعني هر بار يك واحد به شمارشگر حلقه اضافه مي شود. )
2- در زبان سي i++ يعني i=i+1 و i-- يعني i=i-1 و كلا i-=n يعني i=i-n و به همين ترتيب. براي مثال i*=n يعني i=i*n و i+=n يعني i=i+n و ...
3- اگر پس از حلقه ي for يك خط كد داشته باشيم نيازي به آكولاد نيست (مانند قسمت اول كد). ولي اگر تعداد خطوط مربوط به بدنه ي for زياد بود بايد حتما از آكولاد استفاده شود (مانند قسمت دوم كد). (اين قاعده اي كلي است در زبانهاي مشتق شده از زبان سي در مورد هر چيزي!)
4- فرض كنيد در قسمت اول كد بالا بجاي 1000 مي نوشتيد 1001 . سريعا با يك خطاي زمان اجرا مواجه مي شديد. زيرا مي خواستيد به عضوي از آرايه دسترسي پيدا كنيد كه تعريف نشده است. راه مدرن چك كردن اين مسائل استفاده از خاصيت Length آرايه است كه در قسمت دوم كد در عمل مشاهده مي نماييد. هميشه از اين روش استفاده كنيد.
5- حلقه ي اول يعني اينكه كار پر كردن آرايه intData را از صفر تا 999 يكي يكي (i++) انجام بده.

استفاده از حلقه ي while :
يك برنامه ي سي شارپ جديد console را در VS.NET باز كنيد و نام آنرا درابتدا ex08 انتخاب نماييد. سپس كد زير را درون آن بنويسيد :

[/SIZE][/FONT]
[FONT=Arial][SIZE=2]using System;

namespace ex08
{
class Class1
{
[STAThread]
static void Main(string[] args)
{
int n = 1;

while (n < 6)
{
Console.WriteLine("Current value of n is {0}", n);
n++;
}

Console.ReadLine();
}
}
}

[/SIZE][/FONT]
[FONT=Arial][SIZE=2]توضيحاتي در مورد كد فوق :
1- حلقه ي while در بالا كار انجام حلقه را تا هنگامي انجام مي دهد كه شرط ذكر شده در ابتداي آن صادق و برقرار باشد. يعني در حلقه ي فوق تا وقتي n<6 است اين حلقه ادامه خواهد يافت.
2- حلقه ي while صفر يا بيشتر بار ممكن است اجرا شود.
3- در كد فوق از {0} استفاده گرديده است. متد WriteLine به شما اين اجازه را مي دهد كه n تا آرگومان براي آن تعريف كنيد و مقادير هر كدام را كه خواستيد در كد نمايش دهيد از {x} استفاده كنيد. در اين مورد مقدار آرگومان x ام نمايش داده مي شود.

استفاده از حلقه ي do :

يك برنامه ي سي شارپ جديد console را در VS.NET باز كنيد و نام آنرا درابتدا ex09 انتخاب نماييد. سپس كد زير را درون آن بنويسيد :

[/SIZE][/FONT]
[FONT=Arial][SIZE=2]using System;

namespace ex09
{

class Class1
{
[STAThread]
static void Main(string[] args)
{
int x;
int y = 0;

do
{
x = y++;
Console.WriteLine(x);

}while(y < 5);

Console.ReadLine();

}
}
}

[/SIZE][/FONT]
[FONT=Arial][SIZE=2]توضيحاتي در مورد كد فوق :
1- اين حلقه به حلقه ي do…while معروف است و هر دو جزء آن بايد ذكر گردد.
2- اين حلقه تا زماني كه شرط ذكر شده در قمست while صحيح است ادامه مي يابد.
3- اين حلقه در ابتداي كار بدون توجه به قسمت while حداقل يكبار اجرا مي شود. (مثال زير را اجرا نماييد)

[/SIZE][/FONT]
[FONT=Arial][SIZE=2]int n = 10;
do
{
Console.WriteLine("Current value of n is {0}", n);
n++;
} while (n < 6);

[/SIZE][/FONT]
[FONT=Arial][SIZE=2]استفاده از حلقه ي foreach :

يك برنامه ي سي شارپ جديد console را در VS.NET باز كنيد و نام آنرا درابتدا ex10 انتخاب نماييد. سپس كد زير را درون آن بنويسيد :

[/SIZE][/FONT]
[FONT=Arial][SIZE=2]using System;

namespace ex10
{
class Class1
{
[STAThread]
static void Main(string[] args)
{
int odd = 0, even = 0;
int[] arr = new int [] {0,1,2,5,7,8,11};

foreach (int i in arr)
{
if (i%2 == 0)
even++;
else
odd++;
}

Console.WriteLine(
"Found {0} Odd Numbers, and {1} Even Numbers.",
odd, even) ;

Console.ReadLine();

}
}
}

[/SIZE][/FONT]
[FONT=Arial][SIZE=2]توضيحاتي در مورد كد فوق :
1- از foreach براي حركت در بين اعضاي يك آرايه (مانند مثال بالا) و يا مجموعه ايي از اشياء استفاده مي شود (روشي شكيل ، مدرن و مطمئن! و تقريبا به ارث رسيده از ويژوال بيسيك!!).
2- در زبانهاي مشتق شده از C ، عملگر % ، باقيمانده را محاسبه مي كند.
3- در كد فوق با استفاده از حلقه ي foreach تك تك اعضاي آرايه در مورد زوج و يا فرد بودند مورد بررسي قرار گرفته اند و تعداد اعضاي زوج و فرد در آخر نمايش داده مي شود
[/SIZE][/FONT]
  پاسخ با نقل قول

مقدمه اي بر سي شارپ : قسمت ششم
قدیمی 12-02-2008, 01:13 PM   #7 (permalink)

کاربر آخر فروم باز

 B@RBOD آواتار ها

 
تاریخ عضویت: Oct 2008
سن: 22
نوشته ها: 3,263
سپاس ها: 21
سپاس شده 408 در 349 پست
حالت من:
درجه: 44 [♥ Bé-Yêu ♥♥ Bé-Yêu ♥♥ Bé-Yêu ♥♥ Bé-Yêu ♥♥ Bé-Yêu ♥]
سابقه: 542 / 1084
سحر و جادو: 1087 / 5682
تجربه: 37%

Rep Power: 5 B@RBOD is on a distinguished road
Post مقدمه اي بر سي شارپ : قسمت ششم

[SIZE=2][FONT=Arial][B]دو مورد تكميلي در مورد حلقه ها در سي شارپ :[/B]

1- هر جايي خواستيد به هر دليلي حلقه را پايان دهيد مي توانيد از دستور break; استفاده كنيد. در اين حالت به صورت آني حلقه خاتمه يافته و كدهاي ادامه ي برنامه پس از حلقه اجرا مي شوند.
2- نحوه ي استفاده از دستور continue : فرض كنيد حلقه ي شما در راند 15 خودش است! حالا در اين راند شما مي خواهيد يك سري از دستورات درون حلقه اجرا نشوند و حلقه به راند بعدي منتقل شده و كارش را ادامه دهد. اينجا است كه از دستور continue استفاده مي شود. بهتر است به يك مثال ساده در اين زمينه توجه كنيم.

مثال : يك برنامه ي سي شارپ جديد console را در VS.NET باز كنيد و نام آنرا درابتدا ex11 انتخاب نماييد. سپس كد زير را درون آن بنويسيد :

[/FONT]
[/SIZE][SIZE=2][FONT=Arial]using System;

namespace ex11
{
class Class1
{
[STAThread]
static void Main(string[] args)
{

Console.WriteLine(
"for (int i = 1; i <= 100; i++) -> break at i==5" );
for (int i = 1; i <= 100; i++)
{
if (i == 5)
break;
Console.WriteLine(i);
}
Console.ReadLine();


Console.WriteLine(
"for (int i = 1; i <= 10; i++) -> continue if i<9" );
for (int i = 1; i <= 10; i++)
{
if (i < 9)
continue;
Console.WriteLine(i);
}
Console.ReadLine();

}
}
}

[/FONT]
[/SIZE][SIZE=2][FONT=Arial]موارد تكميلي مربوط به رد و بدل كردن مقادير به/از كلاس ها :

در قسمت بعدي مي خواهيم خاصيتي را تعريف كنيم كه يك مقدار را از كاربر مي گيرد و در برنامه مي توان توسط قسمت هاي ديگر از آن استفاده كرد.

ابتدا يك متغير عمومي بايد در سطح كلاس تعريف كرد تا مقدار دريافت شده توسط set را در خود نگاه داري كند (در مورد scope متغيرها ( متغيرهاي عمومي و محلي و امثال اينها) در هنگام معرفي توابع بيشتر بحث خواهد شد) . سپس از طريق كلمه ي كليدي value مقدار دريافت شده به متغير انتساب مي يابد و چون در سطح كلاس عمومي است در تمام كلاس قابل درسترسي است.

مثال : يك برنامه ي سي شارپ جديد console را در VS.NET باز كنيد و نام آنرا درابتدا ex12 انتخاب نماييد. سپس از منوي پروژه يك كلاس جديد به آن اضافه نماييد (به نام clsDate) و كد زير را درون آن بنويسيد :

[/FONT]
[/SIZE][SIZE=2][FONT=Arial]using System;

namespace ex12
{
public class clsDate
{
private int Year;

public clsDate()
{
}

public int setYear
{
set
{
Year = value;
}
}

public bool IsLeapYear
{
get
{
return System.DateTime.IsLeapYear(Year);
}
}


}
}

[/FONT]
[/SIZE][FONT=Arial][SIZE=2]براي استفاده از آن در متد main برنامه به صورت زير عمل مي كنيم:

[/SIZE][/FONT]
[FONT=Arial][SIZE=2]using System;

namespace ex12
{
class Class1
{
[STAThread]
static void Main(string[] args)
{
clsDate m_var = new clsDate();

m_var.setYear = 1990;

if (m_var.IsLeapYear)
Console.WriteLine("1990 is a leap year.");
else
Console.WriteLine("1990 is not a leap year.");

Console.ReadLine();
}
}
}

[/SIZE][/FONT]
[SIZE=2][FONT=Arial]توضيحاتي در مورد كد فوق:

1- نحوه ي تعريف متغير از يك كلاس جزو اساسي ترين قسمت هاي كار با يك كلاس محسوب مي شود كه در قسمت هاي پيشين نيز معرفي گرديد.
2- هنگامي كه از if استفاده مي كنيم لزومي ندارد حتما بنويسيم m_var.IsLeapYear==true . همين كه اين خاصيت ذكر مي شود در وهله ي اول true بودن آن چك خواهد شد.
3- نحوه ي مقدار دهي به يك خاصيت را هم در كد فوق ملاحظه مي نماييد. در هنگام استفاده از خاصيت ها نيازي به آوردن پرانتزها () در مقابل نام آنها وجود ندارد.
4- براي مرور ، نحوه ي معرفي خاصيت ها با get نيز بيان گرديد. با استفاده از set و get مي توان به كلاس ها ، مقادير متغيرها را پاس كرد و يا مقداري را دريافت نمود.
[/FONT]
[/SIZE]
  پاسخ با نقل قول

مقدمه اي بر سي شارپ : قسمت هفتم
قدیمی 12-02-2008, 01:14 PM   #8 (permalink)

کاربر آخر فروم باز

 B@RBOD آواتار ها

 
تاریخ عضویت: Oct 2008
سن: 22
نوشته ها: 3,263
سپاس ها: 21
سپاس شده 408 در 349 پست
حالت من:
درجه: 44 [♥ Bé-Yêu ♥♥ Bé-Yêu ♥♥ Bé-Yêu ♥♥ Bé-Yêu ♥♥ Bé-Yêu ♥]
سابقه: 542 / 1084
سحر و جادو: 1087 / 5682
تجربه: 37%

Rep Power: 5 B@RBOD is on a distinguished road
Post مقدمه اي بر سي شارپ : قسمت هفتم

[SIZE=2][FONT=Arial][B]تعريف متدها در سي شارپ
[/B]
در اين قسمت به يكي از مهمترين مباحث برنامه نويسي سي شارپ مي رسيم.
متدها در سي شارپ و يا همان توابع در زبان C ، اعضاي يك شيء يا كلاس هستند و مجموعه اي از يك سري از كارها را انجام مي دهند. فرض كنيد در برنامه ي شما ، قسمتي بايد يك عمليات رياضي خاص را انجام دهد و اين قسمت از كد كه شامل چندين خط نيز مي گردد بايد بارها و بارها در برنامه صدا زده شود. براي نظم بخشيدن به برنامه ، آنها را مي توان به صورت توابع بسته بندي كرد و بجاي نوشتن چندين خط تكراري، فقط نام اين بسته ( تابع ) و پارامترهاي آن را فراخواني نمود.

در سي شارپ يك تابع به صورت زير تعريف مي شود :

(نوع و اسامي پارامترها) نام تابع نوع خروجي تابع سطح دسترسي به تابع
}
بدنه ي تابع
{

براي تعريف يك متد يا تابع ابتدا سطح دسترسي به آن مانند public و private سپس نوع خروجي تابع مانند void ( هيچي ) ذكر مي گردد كه داخل اين پرانتزها مي توان ورودي هاي تابع يا بقولي آرگومان هاي ورودي را معرفي كرد. سپس تابع بايد با { شروع و با يك } خاتمه يابد.

براي مثال :

[/FONT]
[/SIZE][SIZE=2][FONT=Arial]public int myFunc( int x )
{
...….
}
[/FONT]
[/SIZE]
[SIZE=2][FONT=Arial]هر تابعي مي تواند صفر تا تعداد بيشماري آرگومان ورودي و صفر تا تعداد بيشماري خروجي داشته باشد. بوسيله يك تابع مي توان پيچيدگي كار را مخفي كرد و صرفا با صدا زدن نام آن ، يك سري از عمليات را انجام داد. گاهي از اوقات لازم مي شود دو يا چند تابع با يك نام داشته باشيم بطوريكه پارامترهاي ورودي يا مقادير خروجي و يا نوع آرگومان هاي ورودي آنها با هم متفاوت باشد به اين كار overloading مي گويند.
بسياري از كلاس هاي دات نت فريم ورك متدها و يا توابع مفيد حاضر و آماده اي را دارند. براي مثال كلاس DateTime ، متدي به نام ToLongDatastring دارد كه تاريخ را به صورت يك رشته طولاني بر مي گرداند.

توابع void :

توابعي كه با نوع void معرفي مي شوند هيچ خروجي ندارند و در زبان ويژوال بيسيك به آْنها sub و در دلفي به آنها procedure مي گويند.

بازگرداندن يك مقدار از يك تابع :

پس از اينكه عمليات يك مجموعه از كدها درون تابع به پايان رسيد با استفاده از كلمه ي return مي توان خروجي تابع را معرفي كرد. لازم به ذكر است ، هرجايي اين كلمه ي return ذكر شود كار تابع خاتمه مي يابد.

بهتر است موارد فوق را با چند مثال مرور كنيم :

مثال : يك برنامه ي سي شارپ جديد console را در VS.NET باز كنيد و نام آنرا درابتدا ex13 انتخاب نماييد. در اينجا مي خواهيم تابعي را تعريف كنيم كه سه برابر جذر يك عدد را بر مي گرداند.

[/FONT]
[/SIZE][SIZE=2][FONT=Arial]using System;

namespace ex13
{
class Class1
{
[STAThread]
static void Main(string[] args)
{
Console.WriteLine( int3SQL(3) );
Console.ReadLine();
}

public static double int3SQL( double intInput )
{
double i=0;
i = Math.Sqrt( intInput );
return i;
}
}
}

[/FONT]
[/SIZE][SIZE=2][FONT=Arial][B]توضيحاتي در مورد كد فوق :
[/B]
1- از شيء Math در سي شارپ مي توان براي انجام يك سري عمليات رياضي ابتدايي استفاده كرد. در اينجا از متد جذر گرفتن آن استفاده شده است.
2- در تعريف تابع خودمان از كلمه ي كليدي static استفاده شده است. درون تابع Main نمي توان توابع غير استاتيك را فراخواني كرد. فعلا اين نكته را بخاطر را داشته باشيد تا در مقالات بعدي بيشتر راجع به آن صحبت شود.
3- بد نيست تابع تعريف شده را كمي بيشتر آناليز كنيم :

[/FONT]
[/SIZE][SIZE=2][FONT=Arial]public static double int3SQL( double intInput )
{
double i=0;
i = Math.Sqrt( intInput );
return i;
}

[/FONT]
[/SIZE][SIZE=2][FONT=Arial]ابتدا سطح دسترسي به تابع ذكر شده است. پابليك ، يعني اين تابع خارج از كلاس يك برنامه نيز قابل دسترسي است. سپس از كلمه ي static استفاده گرديده كه توضيح مختصري را در مورد آن ملاحظه كرديد. در ادامه نوع خروجي تابع كه در اينجا double مي باشد معرفي گرديده است. دقت كنيد كه حتما بايد نوع تعريف شده با مقداري كه يك تابع بر مي گرداند يكسان باشد و گرنه با يك خطا برنامه متوقف مي شود. سپس نام تابع تعريف شده است. داخل پرانتز ها نوع و نام آرگوماني ارائه شده است كه در بدنه ي تابع استفاده مي گردد. اگر به تعداد بيشتري پارامتر و يا آرگومان نياز بود مي توان آنها را با , از هم جدا كرد.
پس از اينكه عمليات تابع خاتمه مي يابد با استفاده از return اين خروجي را معرفي مي نماييم.
براي استفاده از اين تابع به سادگي نام تابع و سپس پرانتزها به همراه يك عدد دلخواه را مي نويسم كه آنرا در متد Main برنامه مي توان مشاهده كرد.

تعريف توابع در كلاس هاي ديگر برنامه و نحوه ي استفاده از آنها :

يكي از زيبايي هاي برنامه نويسي شيء گرا نظم و ترتيب و بسته بندي كارها مي باشد كه اصطلاحا در اينجا به آن encapsulation مي گويند. يعني ما يك سري از توابع و خواص را درون كپسولي به نام كلاس قرار مي دهيم تا به سادگي بارها و بارها از آن استفاده نماييم.
براي اينكار به سادگي يك توابع را به صورت معمول درون كلاس تعريف مي نماييم و سپس همانند خواص كه در مورد آنها صحبت شد ، از توابع مي توان استفاده كرد با اين تفاوت كه هنگام كار با توابع حتي اگر آنها هيچ آرگومان و يا پارامتر ورودي هم نداشته باشند ذكر پرانتزها الزامي است.

مثالي ديگر در اين زمينه :

مثال : يك برنامه ي سي شارپ جديد console را در VS.NET باز كنيد و نام آنرا درابتدا ex14 انتخاب نماييد. سپس از منوي پروژه يك كلاس جديد را به برنامه اضافه نماييد (نام آنرا clsTools بگذاريد) .

[/FONT]
[/SIZE][SIZE=2][FONT=Arial]using System;

namespace ex14
{
public class clsTools
{
public clsTools()
{
}

public uint intCalc ( uint a , uint b )
{
uint c = Math.Min (a,b);
double x = Math.Sqrt(c) ;
uint w = Convert.ToUInt32 ( x);
return w;
}
}
}

[/FONT]
[/SIZE][SIZE=2][FONT=Arial]سپس در متد Main برنامه مي توان به صورت زير از آن استفاده كرد :

[/FONT]
[/SIZE][FONT=Arial][SIZE=2]using System;

namespace ex14
{
class Class1
{
[STAThread]
static void Main(string[] args)
{
clsTools m_var = new clsTools();
Console.WriteLine( m_var.intCalc(4,9));
Console.ReadLine();
}
}
}

[/SIZE][/FONT]
[SIZE=2][FONT=Arial]توضيحاتي در مورد كد فوق :
1- تابع intCalc ما دو عدد صحيح مثبت را مي گيرد و سپس جذر كوچكترين دو عدد ورودي را محاسبه مي كند.
2- براي تبديل نوع هاي عددي مختلف به هم مي توان از شيء Convert استفاده كرد.
3- بدون استفاده از شيء Convert يكبار برنامه را اجرا كنيد و دليل خطاي بوجود آمده را بيان نماييد
[/FONT]
[/SIZE]
  پاسخ با نقل قول

مقدمه اي بر سي شارپ : قسمت هشتم
قدیمی 12-02-2008, 01:15 PM   #9 (permalink)

کاربر آخر فروم باز

 B@RBOD آواتار ها

 
تاریخ عضویت: Oct 2008
سن: 22
نوشته ها: 3,263
سپاس ها: 21
سپاس شده 408 در 349 پست
حالت من:
درجه: 44 [♥ Bé-Yêu ♥♥ Bé-Yêu ♥♥ Bé-Yêu ♥♥ Bé-Yêu ♥♥ Bé-Yêu ♥]
سابقه: 542 / 1084
سحر و جادو: 1087 / 5682
تجربه: 37%

Rep Power: 5 B@RBOD is on a distinguished road
Post مقدمه اي بر سي شارپ : قسمت هشتم

[SIZE=2][FONT=Arial]چگونه از يك تابع بيش از يك خروجي دريافت كنيم.

ظاهرا به نظر مي رسد كه توابع فقط مي توانند يك return داشته باشند و بلافاصله پس از فراخواني return كار تابع پايان يافته است. در سي شارپ دو كلمه ي كليدي به نام هاي ref و out اضافه شده اند كه اين امر را ساده تر مي كنند.

[B]استفاده از كلمه ي كليدي out :[/B]

از out در تعريف تابع قبل از معرفي نوع آرگومان ورودي استفاده مي كنيم . در اين حالت بجاي اينكه به اين آرگومان ، آرگومان ورودي بگوييم ، مي توان آنرا آرگومان خروجي ناميد. تا يك مثال را در اين زمينه با هم مرور نكنيم اين مورد مفهوم نخواهد بود :

مثال : يك برنامه ي سي شارپ جديد console را در VS.NET باز كنيد و نام آنرا درابتدا ex15 انتخاب نماييد. سپس كد زير را درون آن بنويسيد :

[/FONT]
[/SIZE][SIZE=2][FONT=Arial]using System;

namespace ex15
{
class Class1
{

public static int TestOut(out char i)
{
i = 'b';
return -1;
}

[STAThread]
static void Main(string[] args)
{
char i; // variable need not be initialized
Console.WriteLine(TestOut(out i));
Console.WriteLine(i);
Console.ReadLine();

}
}
}
[/FONT]
[/SIZE]
[SIZE=2][FONT=Arial][B]توضيحاتي در مورد كد فوق :
[/B]1- در تابع TestOut آرگومان i از با كلمه ي كليدي out مشخص شده است. يعني اينكه درون تابع هر گونه تغييري روي i انجام شود ، خارج از تابع قابل دسترسي است.
2- توابعي كه داراي آرگومانهايي تعريف شده با كلمه ي كليدي out هستند نيز مي توانند از return هم استفاده كنند. همانند مثال فوق.

[B]استفاده از كلمه ي كليدي ref :[/B]

اين كلمه ي كليدي نيز دقيقا همانند out عمل مي كند و نحوه ي تعريف و استفاده از آن نيز مشابه است با اين تفاوت كه آرگوماني كه به اين نوع توابع فرستاده مي شود بايد مقدار دهي اوليه شده باشد.

مثال : يك برنامه ي سي شارپ جديد console را در VS.NET باز كنيد و نام آنرا درابتدا ex16 انتخاب نماييد. سپس كد زير را درون آن بنويسيد :

[/FONT]
[/SIZE][SIZE=2][FONT=Arial]using System;

namespace ex16
{
class Class1
{
public static void FillArray(ref int[] arr)
{
// Create the array on demand:
if (arr == null)
arr = new int[10];
// Otherwise fill the array:
arr[0] = 123;
arr[4] = 1024;
}

[STAThread]
static void Main(string[] args)
{
// Initialize the array:
int[] myArray = {1,2,3,4,5};

// Pass the array using ref:
FillArray(ref myArray);

// Display the updated array:
Console.WriteLine("Array elements are:");
for (int i = 0; i < myArray.Length; i++)
Console.WriteLine(myArray[i]);

Console.ReadLine();
}
}
}

[/FONT]
[/SIZE][SIZE=2][FONT=Arial]توضيحاتي در مورد كد فوق :
1- همانطور كه ملاحظه مي كنيد در اينجا هنگام استفاده از تابع FillArray بايد آرگوماني را كه مي خواهيم به آن پاس كنيم مقدار دهي اوليه كنيم.
2- پس مي توان نتيجه گرفت آرگومانهايي كه با out تعريف مي شوند به صورت خالص خروجي هستند و نيازي به مقدار دهي اوليه هنگام استفاده از آنها وجود ندارد. از ref هنگامي استفاده مي كنيم كه بخواهيم روي متغير موجود و مقدار دهي شده ي خارج از تابع ، درون تابع عملياتي صورت گيرد و سپس همان متغير دستكاري شده ، عودت داده شود.

تعريف تابعي با تعداد آرگومانهاي نامعلوم :

گاهي از اوقات نياز است تا تابعي تعريف كنيم كه تعداد آرگومانهاي آن متغير باشند .براي اين منظور از كلمه ي كليدي params استفاده مي شود.
دونكته در اينجا حائز اهميت است:
1- در هر تابعي تنها مي توان يكبار از params استفاده كرد.
2- پس از بكار بردن params ديگر نمي توان هيچ آرگوماني را تعريف كرد.

يكي از مثالهايي كه در اين زمينه مي توان ارائه داد استفاده از آرايه ها به عنوان آرگومان ورودي است. در اين حالت يا مي توان يك آرايه را به صورت كامل به تابع معرفي كرد و يا تنها نام آنرا به تابع پاس كرد. مثال زير را ملاحظه كنيد :

مثال : يك برنامه ي سي شارپ جديد console را در VS.NET باز كنيد و نام آنرا درابتدا ex17 انتخاب نماييد. سپس كد زير را درون آن بنويسيد :

[/FONT]
[/SIZE][SIZE=2][FONT=Arial]using System;

namespace ex17
{
class Class1
{
public static void UseParams(params int[] list)
{
for ( int i = 0 ; i < list.Length ; i++ )
Console.WriteLine(list[i]);
Console.WriteLine();
}

[STAThread]
static void Main(string[] args)
{
UseParams(1, 2, 3);

int[] myarray = new int[3] {10,11,12};
UseParams(myarray);

Console.ReadLine();

}
}
}

[/FONT]
[/SIZE][SIZE=2][FONT=Arial]توضيحاتي در مورد كد فوق :

1- در تابع main به دو صورت از تابع UseParams ما استفاده شده است. يا اينكه خيلي ساده هر تعداد آرگومان را مي توان به تابع فرستاد و يا اينكه در ادامه آرايه ايي رسما تعريف و سپس به تابع فرستاده شود.
2- نحوه ي تعريف و استفاده از آرايه ها به صورت آرگومان ورودي را نيز مي توان در مثال فوق آموخت
[/FONT]
[/SIZE]
  پاسخ با نقل قول

مقدمه اي بر سي شارپ : قسمت نهم
قدیمی 12-02-2008, 01:16 PM   #10 (permalink)

کاربر آخر فروم باز

 B@RBOD آواتار ها

 
تاریخ عضویت: Oct 2008
سن: 22
نوشته ها: 3,263
سپاس ها: 21
سپاس شده 408 در 349 پست
حالت من:
درجه: 44 [♥ Bé-Yêu ♥♥ Bé-Yêu ♥♥ Bé-Yêu ♥♥ Bé-Yêu ♥♥ Bé-Yêu ♥]
سابقه: 542 / 1084
سحر و جادو: 1087 / 5682
تجربه: 37%

Rep Power: 5 B@RBOD is on a distinguished road
Post مقدمه اي بر سي شارپ : قسمت نهم

[SIZE=2][FONT=Arial][B]مبحث overloading :[/B]

گاهي از اوقات لازم است تا نگارش هاي مختلفي از يك تابع داشته باشيم. براي مثال تعريف سه تابع با يك نام اما با آرگومانهاي مختلف. به اين نوع توابع و يا متدها اصطلاحا Overloaded Methods مي گويند . ( فكر كنم آنرا سربارگذاري توابع ترجمه كرده اند! ) براي مثال :

[/FONT]
[/SIZE][SIZE=2][FONT=Arial]void myMethod(int p1);
void myMethod(int p1, int p2);
void myMethod(int p1, string s1);

[/FONT]
[/SIZE][SIZE=2][FONT=Arial]مثال : يك برنامه ي سي شارپ جديد console را در VS.NET باز كنيد و نام آنرا درابتدا ex18 انتخاب نماييد. سپس كد زير را درون آن بنويسيد :

[/FONT]
[/SIZE][SIZE=2][FONT=Arial]using System;

namespace ex18
{
class Class1
{
[STAThread]
static void Main(string[] args)
{
writeIT();

writeIT(12);

Console.ReadLine();
}

public static void writeIT()
{
Console.WriteLine(" writeIT() Ver." );
}

public static void writeIT(int intI)
{
Console.WriteLine(" writeIT(intI) Ver. = " + intI );
}


}
}

[/FONT]
[/SIZE][SIZE=2][FONT=Arial][B]توضيحاتي در مورد كد فوق :
[/B]
1- نحوه ي تعريف دو تابع با يك نام را ملاحظه مي نماييد. اينكار در زبان سي ممنوع است!
2- كامپايلر به صورت هوشمند بر اساس نوع و تعداد آرگومانهاي ورودي ، ورژن مناسب را انتخاب و اجرا مي كند.

نمونه ي ضعيفي از اين بحث در وي بي 6 به صورت تعريف توابعي با پارامترهاي Optional وجود داشت .

[/FONT][FONT=Arial][B]مباحث تكميلي آرايه ها (آرايه هاي چند بعدي):
[/B]
آرايه هاي معمولي (يك بعدي) را مي توان يك رديف با تعدادي خانه خالي آماده ي پر شدن در نظر گرفت. آرايه ي دوبعدي را مي توان مانند يك جدول تشكليل شده از رديف ها و ستون ها در نظر گرفت و الي آخر...
سي شارپ دو نوع آرايه ي چند بعدي را پشتيباني مي كند : rectangular and jagged
در يك آرايه ي rectangular هر رديف ، طولش با رديف بعدي يكي است. آرايه ي jagged در حقيقت آرايه ايي از آرايه ها است ، بنابراين هر كدام از آنها مي تواند طول مختلفي داشته باشد.

تعريف يك آرايه ي دوبعدي به صورت زير است :

[/FONT]
[/SIZE][SIZE=2][FONT=Arial]type [,] array-name

[/FONT]
[/SIZE][SIZE=2][FONT=Arial]مثال : يك برنامه ي سي شارپ جديد console را در VS.NET باز كنيد و نام آنرا درابتدا ex19 انتخاب نماييد. سپس كد زير را درون آن بنويسيد :

[/FONT]
[/SIZE][SIZE=2][FONT=Arial]using System;

namespace ex19
{
class Class1
{
[STAThread]
static void Main(string[] args)
{
const int rows = 4;
const int columns = 3;
// declare a 4x3 integer array
int[,] rectangularArray = new int[rows, columns];
// populate the array
for (int i = 0;i < rows;i++)
{
for (int j = 0;j<COLUMNS;J++)
{
rectangularArray[i,j] = i+j;
}
}
// report the contents of the array
for (int i = 0;i < rows;i++)
{
for (int j = 0;j<COLUMNS;J++)
{
Console.WriteLine("rectangularArray[{0},{1}] = {2}",
i,j,rectangularArray[i,j]);
}
}

Console.ReadLine();
}
}
}
[/FONT]
[/SIZE]
[SIZE=2][FONT=Arial][B]توضيحاتي در مورد كد فوق :[/B]
1- نحوه ي تعريف ، مقدار دهي اوليه و استفاده از آرايه هاي دو بعدي را در مثال فوق ملاحظه مي نماييد.
2- در يك آرايه ي دوبعدي محل قرار گيري رديف ها و ستون ها براي مثال به صورت زير است :

[/FONT]
[/SIZE][SIZE=2][FONT=Arial]new int[rows, columns]-

[/FONT]
[/SIZE][SIZE=2][FONT=Arial][B]استفاده از آرايه هاي چند بعدي :[/B]

مثال : يك برنامه ي سي شارپ جديد console را در VS.NET باز كنيد و نام آنرا درابتدا ex20 انتخاب نماييد. سپس كد زير را درون آن بنويسيد :

[/FONT]
[/SIZE][SIZE=2][FONT=Arial]using System;

namespace ex20
{
class Class1
{
[STAThread]
static void Main(string[] args)
{
const int rows = 4;
const int columns = 3;
// imply a 4x3 array
int[,] rectangularArray =
{
{0,1,2},
{3,4,5},
{6,7,8},
{9,10,11}
};
for (int i = 0;i < rows;i++)
{
for (int j = 0;j<COLUMNS;J++)
{
Console.WriteLine("rectangularArray[{0},{1}] = {2}",
i,j,rectangularArray[i,j]);
}
}
}
}
}

[/FONT]
[/SIZE][SIZE=2][FONT=Arial]توضيحاتي در مورد كد فوق :
1- در حقيقت مثال فوق تعريف آرايه ايي از آرايه ها بود.
2- چون مقدار دهي اوليه به صورت واضحي انجام شده نيازي به ذكر ابعاد آرايه به صورت صحيح وجود نداشت
[/FONT]
[/SIZE]
  پاسخ با نقل قول
پاسخ


کاربران در حال دیدن موضوع: 1 نفر (0 عضو و 1 مهمان)
 
ابزارهای موضوع جستجو در موضوع
جستجو در موضوع:

جستجوی پیشرفته
نحوه نمایش

قوانین ارسال
شما نمیتوانید موضوع جدیدی ارسال کنید
شما امکان ارسال پاسخ را ندارید
شما نمیتوانید فایل پیوست در پست خود ضمیمه کنید
شما نمیتوانید پست های خود را ویرایش کنید

BB code is غیر فعال
شکلک ها فعال است
کد [IMG] فعال است
کدهای HTML غیر فعال است
Trackbacks are فعال
Pingbacks are فعال
Refbacks are فعال




اکنون ساعت 04:25 PM برپایه ساعت جهانی (GMT - گرینویچ) +3.5 می باشد.

vBulletin skin  persian by: Senatorha
Powered by vBulletin Version 3.8.2
Copyright ©2000 - 2010, Jelsoft Enterprises



Content Relevant URLs by vBSEO 3.3.2

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922