ورود به حساب ثبت نام جدید فراموشی کلمه عبور
برای ورود به حساب کاربری خود، نام کاربری و کلمه عبورتان را در زیر وارد کرده و روی “ ورود به حساب” کلیک کنید.





اگر فرم ثبت نام برای شما نمایش داده نمیشود، اینجا را کلیک کنید.









اگر فرم بازیابی کلمه عبور برای شما نمایش داده نمیشود، اینجا را کلیک کنید.





نمایش نتایج: از 1 به 5 از 5
  1. #1
    adminmsp
    مدیر کل و موسس سایت
    تاریخ عضویت
    1970 Jan
    محل سکونت
    M.S.P Soft
    نوشته ها
    1,590
    759
    465

    آموزش جامع Visual C# 2005

    آموزش جامع Visual C# 2005
    درس اول : آغاز كار با C#



    ليست 1-1، يك برنامة ساده با عنوان Welcome در زبان C#
    // Namespace اعلان
    کد:
     using System;
    // كلاس آغازين برنامه
    کد:
     classWelcomeCSS
    {
    // آغاز كار اجراي برنامه
    کد:
     public static void Main()
    {
    // نوشتن متن در خروجي
    کد:
     Console.WriteLine("Welcome to the C# Persian Tutorial!");
    }
    }
    برنامة ليست 1-1 داراي 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 Studio.Net بپردازم. اما فعلاً براي اجراي برنامه*ها مي*توانيد از Visual Studio.Net استفاده كنيد. پس از نصب آن، وارد محيط C# شده و در قسمت انتخاب برنامة جديد گزينة Console را جهت اجراي برنامه*ها انتخاب نماييد.
    براي اين درس، فعلاً به توضيحات بيشتر دربارة محيط ويژوال نمي*پردازم اما در آينده به توضيح كامل محيط Visual Studio.Net خواهم پرداخت.
    براي اجراي كد بالا در صورتيكه از محيط ويژوال استفاده مي*كنيد بايد بر روي دكمة Run كليك كنيد و در صورتيكه كامپايلر Command Line داريد با دستور زير مي*توانيد برنامه را اجرا كنيد : csc Welcome.cs
    پس از اجراي برنامه، كامپايلر براي شما يك فايل قابل اجرا(Executable) تحت نام Welcome.exe توليد مي*كند.
    نكته : در صورتيكه از Visual Studio.Net(VS.Net) استفاده كنيد، پس از اجراي برنامه، يك صفحه براي نمايش خروجي به سرعت باز شده و بسته مي*شود و شما قادر به ديدن خروخي نخواهيد بود. براي اينكه بتوانيد خروجي برنامه را ببينيد، در انتهاي برنامه دستور زير را وارد نماييد :
    *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-1 برنامه*اي را نشان مي*دهد نام كاربر را از ورودي دريافت كرده و آن را بر روي صفحه نمايش مي*دهد. اين ورودي به صورت پارامتري براي متد Main() در نظر گرفته شده است.

    ليست 2-1 : برنامه*اي كه ورودي را از كاربر، بعنوان پارامتر Main()، دريافت مي*كند.
    کد:
    // Namespace اعلان
    usingSystem;
    // كلاس آغازين برنامه
    classNamedWelcome
    {
    // آغاز اجرا برنامه
    public static voidMain(string[] args)
    {
    //نمايش بر روي صفحه
    Console.WriteLine("Hello, {0}!", args[0]);
    Console.WriteLine("Welcome to the C# Persian Tutorial!");
    }
    }
    توجه داشته باشيد كه اين برنامه، ورودي را به صورت Command-Line دريافت مي*كند و در هنگام اجراي برنامه بايد ورودي را در Command-Line وارد نماييد. در صورتيكه ورودي را وارد ننماييد برنامه دچار مشكل شده و متوقف خواهد شد.

    همان طور كه در ليست 2-1 مشاهده مي*نماييد، پارامتر متد 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-1 به آن توجه شود آنست كه اين برنامه تنها از طريق Command-Lineقابل اجراست و در صورتيكه كاربر از اين مطلب كه برنامه بايد داراي ورودي به صورت Command-Line باشد، بي اطلاع باشد و ورودي را در Command-Line وارد نكند، برنامه متوقف شده و اجرا نمي*شود. پس براي رفع چنين مشكلي بايد از روش بهتري جهت دريافت ورودي از كاربر استفاده كرد.

    ليست 3-1 : يك برنامه كه قابليت محاوره با كاربر را دارد.
    // Namespace اعلان
    کد:
     usingSystem;
    // كلاس آغازين برنامه
    کد:
     classInteractiveWelcome
    {
    //آغاز اجراي برنامه
    کد:
     public static voidMain()
    {
    // متني بر روي صفحه نمايش داده مي*شود
    Console.Write("What is your name?: ");
    //متني نمايش داده شده و برنامه منتظر دريافت ورودي مي*ماند
    کد:
    Console.Write("Hello, {0}! ", Console.ReadLine());
    Console.WriteLine("Welcome to the C# Persian Tutorial!");
    }
    }
    همانطوريكه در اين برنامه ديده مي شود، متد Main() داراي پارامتر نيست. در عوض يك خط به متن برنامه ليست 2-1 اضافه شده است. در اولين خط از اين برنامه، متني با عنوان اينكه نام شما چيست؟ بر روي صفحه ظاهر مي*شود. سپس در خط بعدي پس از نوشتن كلمه Hello, ، برنامه منتظر دريافت ورودي از كاربر مي*شود. بدين معني كه اين بار تا زمانيكه كاربر متني را به عنوان نام خود وارد نكند اجراي برنامه به پيش نخواهد رفت و خط بعدي اجرا نمي*شود. اين برنامه روش ايجاد ارتباط از طريق برنامه با كاربر را نمايش مي*دهد. در اين مثال كاربر دقيقاً متوجه مي*شود كه چه زماني بايد اطلاعات را وارد نمايد و اين اطلاعات چه بايد باشد در حاليكه در مثال قبل چنين نبود. همانگونه كه مي*بينيد در اين برنامه آرگومان {0} مستقيماً از طريق دستور Console.ReadLine() دريافت مي*شود و بلافاصله در خروجي نمايش داده مي*شود. دستور ReadLine() نيز يكي از متدهاي كلاس Console است كه بوسيله آن رشته ورودي خوانده مي*شود.
    خروجي برنامه فوق به شكل زير است :
    What is your name?:
    (سپس برنامه منتظر دريافت متني از ورودي توسط كاربر مي*ماند)
    (پس از اينكه كاربر رشته*اي را وارد كرد و كليدEnter را فشار داد، متن زير نمايش داده مي*شود.)
    Hello, Meysam!
    (سپس اجراي برنامه به دستور بعدي منتقل مي*شود)
    Welcome to the C# Persian Tutorial!

    خروجي كامل برنامه :
    What is your name?:
    Hello, Meysam! Welcome to the C# Persian Tutorial!
    توجه كنيد كه ReadLine() به عنوان يك متد، مقداري را به سيستم بازمي*گرداند. اين مقدار در اين برنامه به آرگومان {0} برگردانده مي*شود. اين خط از برنامه را مي*توان طور ديگري هم نوشت :
    string myName=Console.ReadLine();
    Console.WriteLine("Hello, {0}!",myName);

    در اين حالت ما يك متغير از نوع رشته با نام myName تعريف كرده*ايم كه مقدار ورودي در آن ذخيره مي*شود و سپس از اين مقدار به عنوان مقداري* كه {0} مي*پذيرد استفاده كرده*ايم.

    در اين درس آموختيد كه ساختار كلي يك برنامه C# چگونه است. هر برنامه C# از يك كلاس اصلي تشكيل مي*شود كه اين كلاس شامل داده*ها و متغيرها و متدهايي مي*باشد. متد آغازين برنامه كه برنامه با آن شروع به اجرا مي*كند، متد Main() است. با استفاده از توابع كتابخانه*اي مي*نوان به كلاسها و متدهاي C# دسترسي پيدا كرد. از جمله اين توابع System بود كه يكي از كلاسهاي آن Console و چند متد اين كلاس، متدهاي WriteLine() و ReadLine() بودند.
    با M.S.P Soft به دنياي برنامه نويسي وارد شويد[برای نمایش لینک باید عضو شوید. ]
  2. #2
    adminmsp
    مدیر کل و موسس سایت
    تاریخ عضویت
    1970 Jan
    محل سکونت
    M.S.P Soft
    نوشته ها
    1,590
    759
    465
    بررسي دستور if و انواع مختلف آن
    در درسهاي گذشته، برنامه*هايي كه مشاهده مي*كرديد از چندين خط دستور تشكيل شده بودند كه يكي پس از ديگري اجرا مي*شدند و سپس برنامه خاتمه مي*يافت. در اين برنامه*ها هيچ عمل تصميم*گيري صورت نمي*گرفت و تنها دستورات برنامه به ترتيب اجرا مي*شدند. مطالب اين درس نحوه تصميم*گيري در يك برنامه را به شما نشان مي*دهد.

    اولين دستور تصميم*گيري كه ما آنرا بررسي مي*نماييم، دستورالعمل if است. اين دستور داراي سه فرم كلي : تصميم*گيري ساده، تصميم*گيري دوگانه، تصميم*گيري چندگانه مي*باشد.

    مثال 1-3 – فرم*هاي دستورالعمل if
    کد:
     usingSystem;
    
    classIfSelect
    {
    public static voidMain()
    {
    stringmyInput;
    intmyInt;
    Console.Write("Please enter a number: ");
    myInput = Console.ReadLine();
    myInt = Int32.Parse(myInput);
    //تصميم*گيري ساده و اجراي عمل داخل دو كروشه 
    if(myInt > 0)
    {
    Console.WriteLine("Your number {0} is greater than zero.", myInt);
    }
    //تصميم*گيري ساده و اجراي عمل بدون استفاده از دو كروشه
    if(myInt < 0)
    Console.WriteLine("Your number {0} is less than zero.", myInt);
    // تصميم*گيري دوگانه
    if(myInt != 0)
    {
    Console.WriteLine("Your number {0} is not equal to zero.", myInt);
    }
    else
    {
    Console.WriteLine("Your number {0} is equal to zero.", myInt);
    }
    // تصميم*گيري چندگانه
    if(myInt < 0 || myInt == 0)
    {
    Console.WriteLine("Your number {0} is less than or equal to zero.", myInt);
    }
    else if(myInt > 0 && myInt <= 10)
    {
    Console.WriteLine("Your number {0} is between 1 and 10.", myInt);
    }
    else if (myInt > 10 && myInt <= 20)
    {
    Console.WriteLine("Your number {0} is between 11 and 20.", myInt);
    }
    else if(myInt > 20 && myInt <= 30)
    {
    Console.WriteLine("Your number {0} is between 21 and 30.", myInt);
    }
    else
    { 
    Console.WriteLine("Your number {0} is greater than 30.", myInt);
    }
    } //Main()پايان متد 
    } //IfSelectپايان كلاس
    برنامه 1-3 از يك متغير myInt براي دريافت ورودي از كاربر استفاده مي*نمايد، سپس با استفاده از يك سري دستورات كنترلي، كه همان دستور if در اينجاست، عمليات خاصي را بسته به نوع ورودي انجام مي*دهد. در ابتداي اين برنامه عبارت Please enter a umber: در خروجي چاپ مي*شود. دستور Console.ReadLine() منتظر مي*ماند تا كاربر ورودي وارد كرده و سپس كليد Enter را فشار دهد. همانطور كه در قبل نيز اشاره كرده*ايم، دستور Console.ReadLine() عبارت ورودي را به فرم رشته دريافت مي*نمايد پس مقدار ورودي كاربر در اينجا كه يك عدد است به فرم رشته*اي در متغير myInput كه از نوع رشته*اي تعريف شده است قرار مي*گيرد. اما ميدانيم كه براي اجراي محاسبات و يا تصميم*گيري بر روي اعداد نمي*توان از آنها در فرم رشته*اي استفاده كرد و بايد آنها را بصورت عددي مورد استفاده قرار داد. به همين منظور بايد متغير myInput را به نحوي به مقدار عددي تبديل نماييم. براي اين منظور از عبارت Int32.Parse() استفاده مي*نماييم. اين دستور مقدار رشته*اي متغير داخل پرانتزش را به مقدار عددي تبديل كرده و آنرا به متغير ديگري از نوع عددي تخصيص مي*دهد. در اين مثال نيز همانطور كه ديده مي*شود، myInput كه تز نوع رشته*اي است در داخل پرانتز قرار گرفته و اين مقدار برابر با myInt كه از نوع int است قرار گرفته است. با اين كار مقدار عددي رشته ورودي كاربر به متغير myInt تخصيص داده مي*شود. (توضيح كامل*تري در مورد Int32 و ساير تبديلات مشابه به* آن در درسهاي آينده و در قسمت نوع*هاي پيشرفته مورد بررسي قرار مي*گيرند.)حال ما متغيري از نوع مورد نظر در دست داريم و مي*توانيم با استفاده از دستور if بر روي آن پردازش انجام داده و تصميم*گيري نماييم.

    دستور if
    اولين دستور بصورت if(boolean expression) {statements} آورده شده است. دستور if با استفاده از كلمه كليدي if آغاز مي*شود. سپس يك عبارت منطقي درون يك زوج پرانتز قرار مي*گيرد . پس از بررسي اين عبارات منطقي دستورالعمل/دستورالعمل*هاي داخل كروشه اجرا مي*شوند. همانطور كه مشاهده مي*نماييد، دستور if يك عبارت منطقي را بررسي مي*كند. در صورتيكه مقدار اين عبارات true باشد دستورهاي داخل بلوك خود را اجرا مي*نمايد(قبلا توضيح داده شد كه دستورهايي كه داخل يك زوج كروشه {} قرار مي*گيرند در اصطلاح يك بلوك ناميده مي*شوند.) و در صورتيكه مقدار آن برابر با false باشد اجراي برنامه به بعد از بلوك if منتقل مي*شود. در اين مثال همانطور كه ملاحظه مي*نماييد، عبارت منطقي دستور if بشكل if(myInt > 0) است. در صورتيكه مقدار myInt بزرگتر از عدد صفر باشد، دستور داخل بلوك if اجرا مي*شود و در غير اينصورت اجراي برنامه به بعد از بلوك if منتقل مي*گردد.

    دومين دستور if دراين برنامه بسيار شبيه به دستور اول است، با اين تفاوت كه در اين دستور، دستور اجرايي if درون يك بلوك قرار نگرفته است. در صورتيكه بخواهيم با استفاده از دستور if تنها يك دستورالعمل اجرا شود، نيازي به استفاده از بلوك براي آن دستورالعمل نمي*باشد. استفاده از بلوك تنها زماني ضروري است كه بخواهيم از چندين دستور استفاده نماييم.

    دستور if-else
    در بيشتر موارد از تصميم*گيري*هاي دوگانه يا چندگانه استفاده مي*شود. در اين نوع تصميم*گيري*ها، دو يا چند شرط مختلف بررسي مي*شوند و در صورت true بودن يكي از آنها عمل مربوط به آن اجرا مي*گردد. سومين دستور if در اين برنامه نشان دهنده يك تصميم*گيري دوگانه است. در اين حالت درصورتيكه عبارت منطقي دستور if برابر با true باشد دستور بعد از if اجرا مي*شود و در غير اينصورت دستور بعد از else به اجرا در مي*آيد. در حقيقت در اين حالت مي*گوئيم " اگر شرط if صحيح است دستورات مربوط به if را انجام بده و درغير اينصورت دستورات else را اجرا كن".
    فرم كلي دستور if-else بصورت زير است :
    کد:
    if(boolean expression)
    {statements}
    else
    {statements}
    كه در آن boolean expression عبارت منطقي است كه صحت آن مورد بررسي قرار مي*گيرد و statements دستور يا دستوراتي است كه اجرا مي*گردند.

    دستور if-else if … else يا if تودرتو
    در صورتيكه نياز باشد تا چندين حالت منطقي مورد بررسي قرار گيرد و دستورات مربوط به يكي از آنها اجرا شود، از فرم تصميم*گيري چندگانه استفاده مي*نماييم. اين نوع استفاده از دستور if در اصطلاح به if تودرتو (Nested If) معروف است چراكه در آن از چندين دستور if مرتبط به يكديگر استفاده شده است. چهارمين دستور if در مثال 1-3 استفاده از if تودرتو را نشان مي*دهد. در اين حالت نيز دستور با كلمه كليدي if آغاز مي*گردد. شرطي بررسي شده و در صورت true بودن دستورات مربوط به آن اجرا مي*گردد. اما اگر مقدار اين عبارت منطقي false بود آنگاه شرطهاي فرعي ديگري بررسي مي*شوند.اين شرطهاي فرعي با استفاده از else if مورد بررسي قرار مي*گيرند. هر يك از اين شرطها داراي عبارات منطقي مربوط به خود هستند كه در صورت true بودن عبارت منطقي دستورات مربوط به آنها اجرا مي*گردد و در غير اينصورت شرط بعدي مورد بررسي قرار مي*گيرد. بايد توجه كنيد كه در ساختار if تودرتو تنها يكي از حالتها اتفاق مي*افتد و تنها يكي از شرطها مقدار true را بازمي*گرداند.
    فرم كلي if تودرتو بشكل زير است :
    کد:
    if(boolean expression)
    {statements}
    elseif(boolean expression)
    {statements}
    …
    else
    {statements}
    عملگرهاي OR و AND (|| و &&)
    نكته ديگري كه بايد در اينجا بدان اشاره كرد، نوع شرطي است كه در عبارت منطقي دستور if آخر مورد استفاده قرار گرفته است. در اين عبارت منطقي از عملگر || استفاده شده است كه بيانگر OR منطقي است. عملگر OR زماني مقدار true بازمي*گرداند كه حداقل يكي از عملوندهاي آن داراي مقدار true باشد. بعنوان مثال در عبارت (myInt < 0 || myInt == 0)، در صورتيكه مقدار متغير myInt كوچكتر يا مساوي با صفر باشد، مقدار عبارت برابر با true است. نكته قابل توجه آنست كه در زبان *C#، همانطور كه در درس دوم به آن اشاره شد، دو نوع عملگر OR وجود دارد. يكي OR منطقي كه با || نمايش داده مي*شود و ديگري OR معمولي كه با | نشان داده مي*شود. تفاوت بين اين دو نوع OR در آنست كه OR معمولي هر دو عملگر خود را بررسي مي*نمايد اما OR منطقي تنها در صورتيكه عملگر اول آن مقدار false داشته باشد به بررسي عملگر دوم خود مي*پردازد.

    عبارت منطقي (myInt > 0 && myInt <= 10) حاوي عملگر AND شرطي (&&) مي*باشد. اين عبارت در صورتي مقدار true بازمي*گرداند كه هر دو عملوند AND داراي مقدار true باشند. يعني در صورتيكه myInt هم بزرگتر از صفر باشد و هم كوچگتر از 10، مقدار عبارت برابر با true مي*گردد. در مورد AND نيز همانند OR دو نوع عملگر وجود دارد. يكي AND معمولي (&) و ديگري AND شرطي (&&). تفاوت اين دو نيز در آنست كه AND معمولي (&) هميشه هر دو عملوند خود را بررسي مي*نمايد ولي AND شرطي (&&) تنها هنگامي به بررسي عملوند دوم خود مي*پردازد كه مقدار اولين عملوندش برابر با true باشد. عملگرهاي منطقي (|| و &&) را در اصطلاح عملگرهاي ميانبر (short-circuit) مي*نامند چراكه تنها در صورت لزوم عملوند دوم خود را بررسي مي*نمايند و از اينرو سريعتر اجرا مي*شوند.

    بررسي دستور switch
    همانند دستور if، دستور switch نيز امكان تصميم*گيري را در يك برنامه فراهم مي*نمايد.
    مثال 2-3 – دستورالعمل switch
    کد:
     usingSystem;
    
    classSwitchSelect
    {
    public static void Main()
    {
    stringmyInput;
    intmyInt;
    begin:
    Console.Write("Please enter a number between 1 and 3: ");
    myInput = Console.ReadLine();
    myInt = Int32.Parse(myInput);
    // بهمراه متغيري از نوع صحيح switch دستور 
    switch(myInt)
    {
    case1:
    Console.WriteLine("Your number is {0}.", myInt);
    break;
    case2:
    Console.WriteLine("Your number is {0}.", myInt);
    break;
    case3:
    Console.WriteLine("Your number is {0}.", myInt);
    break;
    default:
    Console.WriteLine("Your number {0} is not between 1 and 3.", myInt);
    break;
    } //switchپايان بلوك 
    decide:
    Console.Write("Type \"continue\" to go on or \"quit\" to stop: ");
    myInput = Console.ReadLine();
    // بهمراه متغيري از نوع رشته*اي switch دستور
    switch(myInput)
    {
    case"continue":
    gotobegin;
    case"quit":
    Console.WriteLine("Bye.");
    break;
    default:
    Console.WriteLine("Your input {0} is incorrect.", myInput);
    gotodecide;
    } //switchپايان بلوك
    } //Main()پايان متد
    }//SwitchSelectپايان كلاس
    مثال 2-3 دو مورد استفاده از دستور switch را نشان مي*دهد. دستور switch بوسيله كلمه كليدي switch آغاز شده و به دنبال آن عبارت دستور switch قرار مي*گيرد. عبارت دستور switch مي*تواند يكي از انواع زير باشد : sbyte, byte, short, ushort, int, uint, long, ulong, char, string, enum .(نوع enum در مبحث جداگانه*اي مورد بررسي قرار خواهد گرفت.) در اولين دستور switch در مثال 2-3، عبارت دستور switch از نوع عددي صحيح (int) مي*باشد.

    به دنبال دستور و عبارت switch، بلوك switch قرار مي*گيرد كه در آن گزينه*هايي قرار دارند كه جهت منطبق بودن با مقدار عبارت switch مورد بررسي قرار مي*گيرند. هر يك از اين گزينه*ها با استفاده از كلمه كليدي case مشخص مي*شوند. پس از كلمه كليدي case خود گزينه قرار مي*گيرد و به دنبال آن ":" و سپس دستوري كه بايد اجرا شود. بعنوان مثال به اولين دستور switch در اين برنامه توجه نماييد. در اينجا عبارت دستور switch از نوع int است. هدف از استفاده از دستور switch آنست كه از بين گزينه*هاي موجود در بلوك switch، گزينه*اي را كه مقدارش با مقدار عبارت switch برابر است پيدا شده و عمل مرتبط با آن گزينه اجرا شود. در اين مثال مقدار متغير myInt بررسي مي*شود. سپس اگر اين مقدار با يكي از مقادير گزينه*هاي داخل بلوك switch برابر بود، دستور يا عمل مربوط به آن گزينه اجرا مي*گردد. توجه نماييد كه در اين مثال منظور ما از گزينه همان عدد پس از case است و منظور از دستور عبارتي است كه پس از ":" قرار گرفته است. بعنوان مثال، در دستور زير :

    case1:
    کد:
     Console.WriteLine("Your number is {0}.", myInt);
    عدد 1، گزينه مورد نظر ما و دستور Console.WriteLine(…)، عمل مورد نظر است. در صورتيكه مقدار myInt برابر با عدد 1 باشد آنگاه دستور مربوط به case 1 اجرا مي*شود كه همان Console.WriteLine("Your number is {0}.", myInt); است. پس از منطبق شدن مقدار عبارت switch با يكي از case ها، بلوك switch بايد خاتمه يابد كه اين عمل بوسيله استفاده از كلمه كليدي break، اجراي برنامه را به اولين خط بعد از بلوك switch منتقل مي*نمايد.

    همانطور كه در ساختار دستور switch مشاهده مي*نماييد، علاوه بر case و break، دستور ديگري نيز در داخل بلوك وجود دارد. اين دستور يعني default، براي زماني مورد استفاده قرار مي*گيرد كه هيچ يك از گزينه*هاي بلوك switch با عبارت دستور switch منطبق نباشند. به عبارت ديگر درصورتيكه مقدار عبارت switch با هيچ يك از گزينه*هاي case برابر نباشد، دستور مربوط به default اجرا مي*گردد. استفاده از اين دستور در ساختار بلوك switch اختياري است. همچنين قرار دادن دستور break پس از دستور default نيز اختياري مي*باشد.

    همانطور كه قبلاً نيز گفته شد پس از هر دستور case، به منظور خاتمه دادن اجراي بلوك switch بايد از يك break استفاده نمود. دو استثنا براي اين موضوع وجود دارد. اول اينكه دو دستور case بدون وجود كد و دستورالعملي در بين آنها، پشت سر هم قرار گيرند و ديگري در زمانيكه از دستور goto استفاده شده باشد.

    در صورتيكه دو دستور case بدون وجود كدي در بين آنها، پشت سر يكديگر قرار گيرند، بدين معناست كه براي هر دو case مورد نظر يك عمل خاص در نظر گرفته شده است. به مثال زير توجه نماييد.
    کد:
    switch(myInt)
    {
    case1:
    case2:
    case3:
    Console.WriteLine("Your number is {0}.", myInt);
    break;
    default:
    Console.WriteLine("Your number {0} is not between 1 and 3.", myInt);
    break;
    }
    در اين مثال، همانطور كه مشاهده مي*كنيد، سه دستور case بدون وجود كدي در بين آنها پشت سر يكديگر قرار گرفته*اند. اين عمل بدين معناست كه براي تمامي گزينه*هاي 1، 2 و 3 دستور ;(Console.WriteLine("Your number is {0}.", myInt اجرا خواهد شد. يعني اگر مقدار myInt برابر با هر يك از مقادير 1، 2 و 3 باشد، يك دستور براي آن اجرا مي*شود.

    نكته قابل توجه ديگر در مورد بلوك switch آنست كه، دستورات case حتماً نبايد يك دستور باشد بلكه مي*توان از يك بلوك دستور براي case استفاده نمود.

    دومين استفاده از دستور switch در مثال 2-3، داراي عبارتي از نوع رشته*ايست. در اين بلوك switch چگونگي استفاده از دستور goto نيز نشان داده شده است. دستور goto اجراي برنامه را به برچسبي (label) كه معين شده هدايت مي*نمايد. در حين اجراي اين برنامه، اگر كاربر رشته continue وارد نمايد، اين رشته با يكي از گزينه*هاي دومين switch منطبق مي*شود. چون دستور case مربوط به اين گزينه داراي دستور goto است، اجراي برنامه به برچسبي كه اين دستور مشخص كرده فرستاده مي*شود، بدين معني كه اجراي برنامه به ابتداي جايي مي*رود كه عبارت begin: در آنجا قرار دارد (در اوايل متد Main()). بدين صورت اجراي برنامه از بلوك switch خارج شده و به ابتداي برنامه و در جائيكه برچسب begin: قرار گرفته ارسال مي*شود. در اين برنامه، استفاده از چنين حالتي استفاده از goto باعث ايجاد يك حلقه شده است كه با وارد كردن عبارت quit اجراي آن به پايان مي*رسد.

    در صورتيكه هيچ يك از عبارات continue و يا quit وارد نشوند، اجراي switch به گزينه default مي*رود و در اين گزينه ابتدا پيغام خطايي بر كنسول چاپ شده و سپس با استفاده از دستور goto پرشي به برچسب decide صورت مي*گيرد. پس از پرش به برچسب decide، از كاربر پرسيده مي*شود كه آيا مي*خواهد اجراي برنامه را ادامه دهد يا خير.( با وارد كردن گزينه*هاي continue يا quit) همانطور كه مي*بينيد در اينجا نيز حلقه*اي توليد شده است.

    استفاده از دستور goto در بلوك switch مي*تواند موثر باشد اما بايد توجه نماييد كه استفاده*هاي بي مورد از دستور goto باعث ناخوانا شدن برنامه شده و عيب*يابي (Debug) برنامه را بسيار دشوار مي*نمايد. در برنامه*نويسي*هاي امروزي استفاده از دستور goto بغير از موارد بسيار لازم و ضروري منسوخ شده و به هيچ عنوان توصيه نمي*شود. براي توليد و ساخت حلقه نيز دستورات مفيد و سودمندي در زبان تعبيه شده*اند كه استفاده از goto را به حداقل مي*رسانند. دستورات حلقه در مبحث آينده مورد بررسي قرار خواهند گرفت.

    نكته پاياني اين مبحث آنست كه توجه نماييد كه به جاي استفاده از دستور switch مي*توانيد از چندين دستور if-else استفاده نمايد. دو قطعه برنامه زير معادل يكديگر مي*باشند.
    کد:
     switch(myChar)
    {
    case'A' : 
    Console.WriteLine("Add operation\n");
    break;
    case'M' :
    Console.WriteLine("Multiple operation\n");
    break;
    case'S' : 
    Console.WriteLine("Subtraction operation\n");
    break;
    default:
    Console.WriteLine("Error, Unknown operation\n");
    break;
    }
    معادل بلوك switch با استفاده از if-else
    if (myChar == 'A')
    Console.WriteLine("Add operation\n");
    elseif(myChar == 'M')
    Console.WriteLine("Multiple operation\n");
    elseif (myChar == 'S')
    Console.WriteLine("Subtraction operation\n");
    else 
    Console.WriteLine("Error, Unknown operation\n");
    همانطور كه ملاحظه مي*كنيد استفاده از بلوك دستور switch بسيار ساده*تر از استفاده از if-else هاي تودرتو است.

    در اين درس با نحوه تصميم*گيري در برنامه بوسيله دستور if و switch آشنا شديد. با نحوه عملكرد و استفاده دستور goto نيز آشنايي پيدا كرديد. در پايان مجدداً يادآوري مي*كنم كه در استفاده از دستور goto با احتياط عمل نماييد و به جز در موارد ضروري از آن استفاده نكنيد.
    با M.S.P Soft به دنياي برنامه نويسي وارد شويد[برای نمایش لینک باید عضو شوید. ]
  3. #3
    adminmsp
    مدیر کل و موسس سایت
    تاریخ عضویت
    1970 Jan
    محل سکونت
    M.S.P Soft
    نوشته ها
    1,590
    759
    465
    عبارات، انواع و متغيرها در C#


    متغيرها، به بيان بسيار ساده، مكانهايي جهت ذخيره اطلاعات هستند. شما اطلاعاتي را در يك متغير قرار مي*دهيد و از اين اطلاعات بوسيله متغير در عبارات **C# استفاده مي*نماييد. كنترل نوع اطلاعات ذخيره شده در متغيرها بوسيله تعيين كردن نوع براي هر متغير صورت مي*پذيرد.
    C# زباني بسيار وابسته به انواع است، بطوريكه تمامي عملياتي كه بر روي داده*ها و متغيرها در اين زبان انجام مي*گيرد با دانستن نوع آن متغير ميسر مي*باشد. قوانيني نيز براي تعيين اينكه چه عملياتي بر روي چه متغيري انجام شود نيز وجود دارد.(بسته به نوع متغير)

    انوع ابتدايي زبان C# شامل : يك نوع منطقي(Boolean) و سه نوع عددي اعداد صحيح(integer)، اعداد اعشاري(Floating points) و اعداد دسيمال(Decimal) مي*باشد.(به انواع Boolean از اينرو منطقي مي*گوييم كه تنها داراي دو حالت منطقي صحيح(True) و يا غلط(False) مي*باشند.)

    مثال 1 – نشان دادن مقادير منطقي (Boolean)
    کد:
     usingSystem;
    classBooleans
    {
    public static voidMain()
    {
    boolcontent = true;
    boolnoContent = false;
    Console.WriteLine("It is {0} that C# Persian provides C# programming language
    content.", content);
    Console.WriteLine("The statement above is not {0}.", noContent);
    }
    }
    در اين مثال، مقادير منطقي متغير*هاي Boolean به عنوان قسمتي از جمله در خروجي نمايش داده مي*شوند. متغير*هاي bool تنها مي*توانند يكي از دو مقدار true يا false را داشته باشند، يعني همانند برخي از زبانهاي برنامه*سازي مشابه، مانند C و يا C++، مقدار عددي نمي*پذيرند، زيرا همانگونه كه مي*دانيد در اين دو زبان هر مقدار عددي صحيح مثبت بغير از صفر به عنوان true و عدد صفر به عنوان false در نظر گرفته مي*شود و در حقيقت نوع bool در اين دو زبان نوعي integer مي*باشند. اما در زبان C# انواع boolيكي از دو مقدار true يا false را مي*پذيرند. خروجي برنامه بالا به صورت زير است :
    It is True that C# Persian provides C# programming language content.
    The statement above is not False.
    جدول زير تمامي انواع عددي صحيح *C#، اندازه آنها و رنج قابل قبول آنها را نشان مي*دهد.
    رنج قابل قبول
    اندازه به بيت
    نوع
    کد:
     128- تا 127
    8
    sbyte
    0 تا 255
    8
    byte
    32768- تا 32767
    16
    short
    0 تا 65535
    16
    ushort
    2147483648- تا 2147483647
    32
    int
    0 تا 4294967295
    32
    uint
    9223372036854775808- تا 9223372036854775807
    64
    long
    0 تا 18446744073709551615
    64
    ulong
    از اين انواع براي محاسبات عددي استفاده مي*گردد. يك نوع ديگر را نيز مي*توان در اين جدول اضافه نمود و آن نوع char است. هر چند شايد از نظر بسياري از دوستاني كه با زبانهاي ديگر برنامه*سازي كار كرده*اند اين تقسيم بندي غلط به نظر آيد، اما بايد گفت كه در زبان C# نوع char نيز نوع خاصي از انواع عددي است كه رنجي بين صفر تا 65535 دارد و اندازه آن نيز 16 بيتي است، اما به جاي نمايش دادن مقادير عددي تنها مي*تواند بيان كننده يك كاراكتر باشد. در آينده در اين مورد بيشتر توضيح خواهم داد.

    جدول زير تمامي انواع عددي اعشاري زبان C# را نمايش مي*دهد.
    ر
    کد:
    نج قابل قبول
    دقت
    اندازه به بيت
    نوع
    تا 
    7 رقم
    32
    float
    تا 
    15-16 رقم
    64
    double
    تا 
    28-29 رقم دسيمال
    128
    decimal
    انواعي از نوع floating point هنگامي استفاده مي*شوند كه محاسبات عددي به دقت*هاي اعشاري نياز داشته باشند. همچنين براي منظورهاي تجاري استفاده از نوع decimal بهترين گزينه است. اين نوع تنها در زبان C# وجود دارد و در زبانهاي مشابه به آن نظير Java چنين نوعي در نظر گرفته نشده است.

    در يك زبان برنامه*سازي نتايج بوسيله ايجاد يك سري عبارت توليد مي*گردند. عبارات از تركيب متغيرها و عملگرها در دستورالعمل*هاي يك زبان ايجاد مي*گردند.(توجه نماييد كه عبارت معادل expression و دستورالعمل معادل statement مي*باشد كه ايندو با يكديگر متفاوت مي*باشند.) جدول زير عملگرهاي موجود در زبان C#، حق تقدم آنها و شركت*پذيري آنها را نشان مي*دهد.
    شركت*پذيري
    عملگر(ها)
    نوع عمل
    ا
    کد:
    ز چپ
    (x) x.y f(x) a[x] x++ x--
    new typeof sizeof checked unchecked
    عمليات ابتدايي
    از چپ
    + - ! ~ ++x --x (T)x
    عمليات يكاني
    از چپ
    * / %
    عمليات ضربي
    از چپ
    - +
    عمليات جمعي
    از چپ
    << >>
    عمل شيفت
    از چپ
    < > <= >= is
    عمليات رابطه*اي
    از راست
    == !=
    عمليات تساوي
    از چپ
    &
    عمل AND منطقي
    از چپ
    |
    عمل OR منطقي
    از چپ
    ^
    عمل XOR منطقي
    از چپ
    &&
    عمل AND شرطي
    از چپ
    ||
    عمل OR شرطي
    از چپ
    ?:
    عمل شرطي
    از راست
    = *= /= %= += -= <<= >>= &= ^= |=
    با M.S.P Soft به دنياي برنامه نويسي وارد شويد[برای نمایش لینک باید عضو شوید. ]
  4. #4
    adminmsp
    مدیر کل و موسس سایت
    تاریخ عضویت
    1970 Jan
    محل سکونت
    M.S.P Soft
    نوشته ها
    1,590
    759
    465
    عمل انتساب

    شركت*پذيري از چپ بدين معناست كه عمليات از چپ به راست محاسبه مي*شوند. شركت*پذيري از راست بدين معناست كه تمامي محاسبات از راست به چپ صورت مي*گيرند. به عنوان مثال در يك عمل تساوي، ابتدا عبارات سمت راست تساوي محاسبه شده و سپس نتيجه به متغير سمت چپ تساوي تخصيص داده مي*شود.

    مثال 2- عملگرهاي يكاني (Unary)
    کد:
     usingSystem;
    classUnary
    {
    public static voidMain()
    {
    intunary = 0;
    intpreIncrement;
    intpreDecrement;
    intpostIncrement;
    intpostDecrement;
    intpositive;
    intnegative;
    sbytebitNot;
    boollogNot;
    preIncrement = ++unary;
    Console.WriteLine("Pre-Increment: {0}", preIncrement);
    preDecrement = --unary;
    Console.WriteLine("Pre-Decrement: {0}", preDecrement);
    postDecrement = unary--;
    Console.WriteLine("Post-Decrement: {0}", postDecrement);
    postIncrement = unary++;
    Console.WriteLine("Post-Increment: {0}", postIncrement);
    Console.WriteLine("Final Value of Unary: {0}", unary);
    positive = -postIncrement;
    Console.WriteLine("Positive: {0}", positive);
    negative = +postIncrement;
    Console.WriteLine("Negative: {0}", negative);
    bitNot = 0;
    bitNot = (sbyte)(~bitNot);
    Console.WriteLine("Bitwise Not: {0}", bitNot);
    logNot = false;
    logNot = !logNot;
    Console.WriteLine("Logical Not: {0}", logNot);
    }
    }
    به هنگام محاسبه عبارات، دو عملگر x++ و x—(كه در اينجا كاراكتر x بيان كننده آن است كه عملگرهاي ++ و – در جلوي عملوند قرار مي*گيرند post-increment و post-decrement) ابتدا مقدار فعلي عملوند (operand) خود را باز مي*گرداند و سپس به عملوند خود يك واحد اضافه كرده يا از آن يك واحد مي*كاهند. عملگر ++ يك واحد به عملوند خود اضافه مي*كند و عملگر – يك واحد از عملوند خود مي*كاهد. بدين ترتيب عبارت x++ معادل است با عبارت x=x+1 و يا x+=1 اما همانطور كه گفته شد بايد توجه داشته باشيد كه اين عملگرها(++ و --) ابتدا مقدار فعلي عملوند خود را برگشت مي*دهند و سپس عمل خود را روي آنها انجام مي*دهند. بدين معني كه در عبارت x=y++ در صورتيكه در ابتداي اجراي برنامه مقدار x=0 و y=1 باشد، در اولين اجراي برنامه مقدار x برابر با 1 يعني مقدار y مي*شود و سپس به متغير y يك واحد افزوده مي*شود، در صورتيكه اگر اين عبارت را بصورت x=++y بنويسيم در اولين اجراي برنامه، ابتدا به مقدار متغير y يك واحد افزوده مي*شود و سپس اين مقدار به متغير x تخصيص داده مي*شود كه در اين حالت مقدار متغير x برابر با 2 مي*شود.(در مورد عملگر – نيز چنين است.) پس با اين توضيح مي*توان گفت كه دو عملگر ++x و –x ابتدا به عملوند خود يك واحد اضافه يا يك واحد از آن كم مي*كنند و سپس مقدار آنها را باز مي*گردانند.

    در مثال 2، مقدار متغير unary در قسمت اعلان برابر با 0 قرار گرفته است. هنگاميكه از عملگر ++x استفاده مي*كنيم، به مقدار متغير unary يك واحد افزوده مي*شود و مقدارش برابر با 1 مي*گردد و سپس اين مقدار، يعني 1، به متغير preIncrement تخصيص داده مي*شود. عملگر –x مقدار متغير unary را به 0 باز مي*گرداند و سپس اين مقدار را به متغير preDecrement نسبت مي*دهد.
    هنگاميكه از عملگر x-- استفاده مي*شود، مقدار متغير unary، يا همان مقدار صفر، به متغير postDecrement تخصيص داده مي*شود و سپس از مقدار متغير unary يك واحد كم شده و مقدار اين متغير به 1- تغيير مي*كند. سپس عملگر x++ مقدار متغير unary، يعني همان 1-، را به متغير postIncrement تخصيص مي*دهد و سپس يك واحد به مقدار متغير unary مي*افزايد تا مقدار اين متغير برابر با 0 (صفر) شود.

    مقدار متغير bitNot در هنگام اعلان برابر با صفر است. با استفاده از عملگر نقيض بيتي (~) (يا عملگر مكمل*گيري) متغير bitNot بعنوان يك بايت در نظر گرفته مي*شود و مقدار آن منفي يا نقيض مي*شود. در عمليات بيتي نقيض بدين معناست كه تمامي يكها به صفر و تمامي صفرها به يك تبديل شوند. در اين حالت نمايش باينري عدد صفر يا همان 00000000 به نقيض آن يعني 11111111 تبديل مي*گردد.

    در اين مثال به عبارت (sbyte)(~bitNot) توجه نماييد. هر عملي كه بر روي انواع short،unshort ، byte و sbyte انجام شود، مقداري از نوع int را باز مي*گرداند. بمنظور اينكه بتوانيم نتيجه دلخواه را به متغير bitNot تخصيص دهيم بايد از فرمت (Type) operator استفاده نماييم كه در آن Type نوعي است مي*خواهيم نتيجه ما به آن نوع تبديل شود و operator عملي است كه بر روي متغير صورت مي*پذيرد. به بيان ديگر چون مي*خواهيم مقدار متغير bitNot بصورت بيتي در نظر گرفته شود، پس بايد نتيجه عمل ما بصورت بيتي در آن ذخيره شود كه استفاده از نوع sbyte باعث مي*شود تا نتيجه به فرم بيتي (يا بايتي) در متغير ما ذخيره شود. بايد توجه نماييد كه استفاده از فرمت (Type) يا در اصطلاح عمل Casting، در مواقعي كه مي*خواهيم تغييري از يك نوع بزرگتر به نوع كوچكتر ايجاد نماييم، مورد استفاده قرار گيرد، چرا كه در اين حالات ممكن است با از دست دادن اطلاعات مواجه باشيم. در اين مثال چون مي*خواهيم نوع بزرگتر int را به(32 بيتي) به نوع كوچكتر sbyte (8 بيتي) تبديل نماييم، بدين منظور بايد بطور صريح از عمل Casting استفاده نماييم تا اطلاعاتي در اين تبديل از بين نرود. در مورد تبديل انواع كوچكتر به انواع بزرگتر(مثلا تبديل sbyte به int) نيازي به استفاده از عمل Casting نيست چرا كه امكان از بين رفتن اطلاعات وجود ندارد. در ضمن بايد به يك نكته مهم توجه نماييد و آن تبديل انواع علامتدار(Signed) و بدون علامت(Unsigned) به يكديگر است. در اين حالت خطر بسيار مهمي داده*هاي شما را تهديد مي*نمايد. بحث در مورد مسائل پيچيده*تر در مورد تبديل انواع علامتدار و و بدون علامت به يكديگر در اينجا نمي*گنجد و سعي مي*كنم تا آنها را در مطالب بعدي و در جاي لازم مورد بحث و بررسي قرار دهم.(در صورتيكه برخي از مطالب اين قسمتها براي شما به خوبي قابل درك نيست، نگران نباشيد چراكه در آينده در مثالهايي كه خواهيد ديد تمامي اين مطالب را در عمل نيز حس كرده و با آنها آشنا خواهيد شد.)

    عملگر بعدي كه در اين برنامه مورد استفاده قرار گرفته است، عملگر نقيض منطقي يا همان "!" است كه امكان تغيير مقدار يك متغير Boolean را از true به false و بالعكس را فراهم مي*آورد. در مثال بالا(مثال شماره 2) مقدار متغير logNot پس از استفاده از عملگر "!" از false به true تغيير كرده است. با توجه به توضيحات اخير خروجي زير از برنامه مثال 2 مورد انتظار است :
    Pre-Increment: 1
    کد:
     Pre-Decrement 0
    Post-Decrement: 0
    Post-Increment -1
    Final Value of Unary: 0
    Positive: 1
    Negative: -1
    Bitwise Not: -1
    Logical Not: True
    مثال 3 – عملگرهاي دوتايي
    usingSystem;
    classBinary
    {
    public static voidMain()
    { 
    intx, y, result;
    floatfloatResult;
    x = 7;
    y = 5;
    result = x+y;
    Console.WriteLine("x+y: {0}", result);
    result = x-y;
    Console.WriteLine("x-y: {0}", result);
    result = x*y;
    Console.WriteLine("x*y: {0}", result);
    result = x/y;
    Console.WriteLine("x/y: {0}", result);
    floatResult = (float)x/(float)y;
    Console.WriteLine("x/y: {0}", floatResult);
    result = x%y;
    Console.WriteLine("x%y: {0}", result);
    result += x;
    Console.WriteLine("result+=x: {0}", result);
    }
    }
    خروجي اين برنامه به فرم زير است : 
    x+y: 12
    x-y: 2
    x*y: 35
    x/y: 1
    x/y: 1.4
    x%y: 2
    result+=x: 9
    مثال 3 استفاده*هاي متفاوتي از عملگرهاي دوتايي را نشان مي*دهد.(منظور از عملگر دوتايي، عملگري است كه داراي دو عملوند مي*باشد مانند عملگر جمع "+"). بسياري از عملگرهاي مورد استفاده در اين مثال عملگرهاي رياضي هستند و نتيجه عمل آنها مشابه عملي است كه از آنها در رياضيات ديده*ايد. از نمونه اين عملگرها مي*توان به عملگرهاي جمع "+"، تفريق "-"، ضرب "*" و تقسيم "/" اشاره نمود.

    متغير floatResult از نوع اعشاري يا float تعريف شده است. در اين مثال نيز صريحاً از عمل Casting جهت اسفاده از دو متغير x و y كه از نوع int هستند، براي انجام عملي كه نتيجه*اش از نوع float است، استفاده كرده*ايم.

    در اين مثال از عملگر "%" نيز استفاده كرده*ايم. اين عملگر در عمليات تقسيم كاربرد دارد و باقيمانده تقسيم را برمي*گرداند. يعني دو عملوند خود را بر يكديگر تقسيم مي*كند و باقيمانده اين تقسيم را برمي*گرداند.

    در اين مثال همچنين فرم جديدي از عمل انتساب را بصورت result+=x مشاهده مي*نماييد. استفاده از عملگرهاي انتسابي كه خود تركيبي از دو عملگر هستند، جهت سهولت در امر برنامه*نويسي مورد استفاده قرار مي*گيرند. عبارت فوق معادل result = result+x مي*باشد. يعني مقدار قبلي متغير result با مقدار متغير x جمع مي*شود و نتيجه در متغير result قرار مي*گيرد.

    يكي ديگر از انواعي كه تا كنون با آن سر و كار داشته*ايم نوع رشته*اي (string)است. يك رشته، از قرار گرفتن تعدادي كاراكتر در كنار يكديگر كه داخل يك زوج كوتيشن " " قرار گرفته*اند، ايجاد مي*گردد. بعنوان مثال "Hi This is a string type". در اعلان متغيرها نيز در صورت تعريف متغيري از نوع رشته*اي، در صورت نياز به تخصيص مقدار به آن، حتماً كاراكترهايي كه مي*خواهيم بعنوان يك رشته به متغيرمان نسبت دهيم را بايد داخل يك زوج كوتيشن " " قرار دهيم. به مثال زير توجه نماييد.
    string Name;

    Name = "My name is Meysam";
    همانطور كه در اين مثال مشاهده مي*نماييد، متغيري از نوع رشته*اي تحت نام Name تعريف شده است و سپس در جايي از برنامه كه نياز به تخصيص مقدار براي اين متغير وجود دارد، عبارت مورد نظر را داخل دو كوتيشن قرار داده و به متغير خود تخصيص داده*ايم. رشته*ها از پر كاربرد ترين انواع در زبان*هاي برنامه*سازي جهت ايجاد ارتباط با كاربر و دريافت اطلاعات از كاربر مي*باشند.(همانطور كه در درس قبل اول نيز گفته شد، دستور Console.ReadLine() يك رشته را از ورودي دريافت مي*نمايد.) در مثالهايي كه در طي درسهاي اين سايت خواهيد ديد، نمونه*هاي بسياري از كاربرد انواع مختلف و نيز نوع رشته*اي را خواهيد ديد.

    آرايه*ها(Arrays)

    يكي ديگر از انواع داده*اي در زبان C#، آرايه*ها (Arrays) مي*باشند. يك آرايه را به عنوان مخزني براي نگهداري اطلاعات در نظر مي*گيريم كه داراي ليستي از محلهايي است كه در آنها اطلاعات ذخيره شده است و از طريق اين ليست مي*توان به اطلاعات آنها دسترسي پيدا نمود. به هنگام اعلان آرايه*ها بايد نوع، اندازه و تعداد بعد آنها را نيز معين نمود.

    مثال 4- آرايه*ها و عمليات بر روي آنها
    کد:
     usingSystem;
    classArray
    {
    public static voidMain()
    {
    int[] myInts = { 5, 10, 15 };
    bool[][] myBools = new bool[2][];
    myBools[0] = new bool[2];
    myBools[1] = new bool[1];
    double[,] myDoubles = newdouble[2, 2];
    string[] myStrings = newstring[3];
    Console.WriteLine("myInts[0]: {0}, myInts[1]: {1}, myInts[2]: {2}", myInts[0],
    myInts[1], myInts[2]);
    myBools[0][0] = true;
    myBools[0][1] = false;
    myBools[1][0] = true;
    Console.WriteLine("myBools[0][0]: {0}, myBools[1][0]: {1}", myBools[0][0],
    myBools[1][0]);
    myDoubles[0, 0] = 3.147;
    myDoubles[0, 1] = 7.157;
    myDoubles[1, 1] = 2.117;
    myDoubles[1, 0] = 56.00138917;
    Console.WriteLine("myDoubles[0, 0]: {0}, myDoubles[1, 0]: {1}", myDoubles[0, 0], myDoubles[1, 0]);
    myStrings[0] = "Joe";
    myStrings[1] = "Matt";
    myStrings[2] = "Robert";
    Console.WriteLine("myStrings[0]: {0}, myStrings[1]: {1}, myStrings[2]: {2}",
    myStrings[0], myStrings[1], myStrings[2]);
    }
    }
    خروجي مثال 4 بصورت زير است :
    کد PHP:
     myInts[0]: 5myInts[1]: 10myInts[2]: 15
    myBools
    [0][0]: TruemyBools[1][0]: True
    myDoubles
    [00]: 3.147myDoubles[10]: 56.00138917
    myStrings
    [0]: JoemyStrings[1]: MattmyStrings[2]: Robert 
    در اين مثال انواع مختلفي از آرايه*ها اعلان شده*اند. در ابتدا يك آرايه تك بعدي، سپس آرايه*اي دندانه*دار و در نهايت نيز يك آرايه دو بعدي در اين مثال اعلان شده*اند.
    اولين اعلان در اين برنامه مربوط به اعلان آرايه تك بعدي myInts مي*باشد كه از نوع int بوده و داراي 3 عضو مي*باشد كه تعداد اين اعضا با اعلان چند مقدار در داخل { } معين شده است. همانطور كه از اين اعلان دريافت ميشود، آرايه تك بعدي بصورت زير تعريف مي*شود :
    type[] arrayName;
    كه در آن type نوع آرايه و arrayName نام آرايه ايست كه تعريف مي*نمائيم.
    اما در ابتدا گفته شد كه به هنگام اعلان آرايه*ها اندازه آنها نيز بايد مشخص شود. براي تعيين اندازه آرايه، يعني تعدا عناصري كه آرايه در خود جاي مي*دهد، مي*توان به چند روش عمل نمود. اولين و ساده*ترين روش كه در اين مثال نيز آورده شده است، تخصيص مقاديري به آرايه در داخل يك زوج { } است. بسته به نوع آرايه، تعداد عناصري كه داخل اين زوج { } قرار مي*گيرند، تعداد عناصر آرايه مي*باشند و مقادير عناصر آرايه نيز همان مقاديري است كه داخل { } قرار گرفته است. به عنوان مثال در مثال 4، اولين آرايه ما داراي 3 عنصر است كه مقادير آنها به ترتيب برابر با 5، 10 و 15 مي*باشد.
    روش ديگر جهت تعيين اندازه آرايه استفاده از روش تعريف كامل آرايه است كه به فرم كلي زير مي*باشد.
    type[] arrayName = new type[n];
    كه در اين تعريف، استفاده از كلمه كليدي new باعث ايجاد نمونه*اي جديد از نوع مورد نظر، مي*شود. n نيز تعداد عناصر آرايه است كه مي*خواهيم آنرا توليد نماييم. در اين حالت بايد توجه داشت كه آرايه*اي تهي را توليد نموده*ايم و هيچ عنصري را در آرايه جاي نداده*ايم و در برنامه بايد آرايه را مقدار دهي نماييم. به مثال زير توجه كنيد.
    int[] myArray = new int[15];
    اين مثال آرايه*اي تك بعدي از نوع int را با اندازه 15 عنصر توليد مي*نمايد. يعني اين آرايه قادر است تا 15 عنصر از نوع int را در خود ذخيره نمايد.

    گونه ديگري از آرايه*ها، آرايه*هاي چند بعدي (Multi Dimensional Arrays) هستند كه براي نگهداري اطلاعات از چندين بعد استفاده مي*كنند و بيشتر براي نگداري جداول و ماتريسها مورد استفاده قرار مي*گيرند. فرم كلي اعلان اين آرايه*ها بصورت زير است :
    type[ , , … , ] arrayName = new type[n1, n2, …. , nm];
    كه در آن تعداد ابعاد آرايه با ويرگول مشخص شده و n1 تا nm نيز تعداد عناصر هر يك از ابعاد است. بعنوان مثال تعريف يك آرايه سه بعدي به فرم زير است :
    char[ , , ] charArray = new char[3,5,7];
    در اين مثال يك آرايه سه بعدي از نوع char توليد كرده*ايم كه ابعاد آن به ترتيب داراي 3، 5 و 7 عنصر مي*باشند.
    با M.S.P Soft به دنياي برنامه نويسي وارد شويد[برای نمایش لینک باید عضو شوید. ]
  5. #5
    adminmsp
    مدیر کل و موسس سایت
    تاریخ عضویت
    1970 Jan
    محل سکونت
    M.S.P Soft
    نوشته ها
    1,590
    759
    465
    وع ديگري از آرايه*ها، آرايه*هاي دندانه*دار (Jagged Arrays) هستند. اين نوع آرايه*ها تنها در زبان *C# وجود دارند و در صرفه*جويي حافظه بسيار موثر ميباسند. يك آرايه دندانه*دار، در حقيقت يك آرايه تك بعدي است كه هر يك از اعضاي آن خود يك آرايه تك بعدي مي*باشند. اندازه اين عناصر مي*تواند متفاوت باشد و تفاوت اين آرايه*ها با* آرايه*هاي چند بعدي در همين جا نمايان مي*شود. استفاده از اين آرايه*ها در مواردي كاربرد دارد كهنيازي نيست تا تمامي ابعاد آرايه داراي تعداد عناصر مساوي باشند. بعنوان مثال فرض كنيد مي*خواهيد آرايه*اي جهت نگهداري تعداد روزهاي ماههاي مختلف سال تهيه كنيد. در صورتيكه بخواهيد از آرايه چند بعدي استفاده نماييد، چون تعداد روزهاي تمامي ماههاي سال يكسان نيست، مجبوريد تا تعداد عناصر تمام بعدهاي آرايه را برابر با بزرگترين تعداد روز ماهها، يعني 31، تعريف نماييد. ولي چون تنها 6 ماه داراي 31 روز مي*باشند، براي 6 ماه ديگر تعدادي از عناصر آرايه هيچگاه مورد استفاده قرار نمي*گيرند و حافظه را به هدر داده*ايم. اما در صورتيكه براي اين مثال از آرايه*هاي دندانه*دار استفاده نماييم، مي*توانيم يك آرايه دندانه*دار 12 عنصري تعريف نماييم و سپس تعداد عناصر هر يك از اعضاي آنرا برابر با تعداد روزهاي ماه مورد نظر تعريف كنيم :
    با استفاده از آرايه چند بعدي :
    کد:
     int[ , ] monthArray = new int[12,31];
    با استفاده از آرايه دندانه*دار :
    کد:
     int[][] monthArray = new int[12][];
    در تعريف اول كه در آن از آرايه چند بعدي استفاده كرديم، مشاهده مي*كنيد كه آرايه*اي دو بعدي تعريف كرده*ايم كه بعد اول آن 12 عضو و بعد دوم آن 31 عضو دارد. اين عمل دقيقاً همانند ايجاد يك جدول براي نگهداري روزهاي ماههاي سال است.
    اما در حالت دوم كه در آن از آرايه دندانه*دار بهره برده*ايم، يك آرايه تعريف نموده*ايم كه بعد اول آن 12 عضو دارد ولي بعد دوم آنرا را تعريف نكرده*ايم كه داراي چند عضو است و هر يك از عناصر بعد اول آرايه مي*تواند داراي تعداد اعضاي متفاوتي باشد كه با استفاده از اين روش مي*توان به هر يك از ماههاي سال تعداد روزهاي مورد نظر آن ماه را تخصيص داد و فضايي بلا استفاده ايجاد نخواهيم كرد. توجه نماييد كه چون تعداد عناصر بعد ديگر اين آرايه معين نشده است در برنامه بايد اين تعداد عنصر را مشخص نماييم :
    monthArray[1] = new int[31];
    monthArray[10] = new int [30];
    مشاهده مي*كنيد كه به هر ماه، تعدا عنصر مورد نياز خود را تخصيص داده*ايم. تنها بايد به تفاوت اعلان آرايه*هاي دندانه*دار با آرايه*هاي چند بعدي توجه نماييد.

    دسترسي به عناصر آرايه از طريق انديس امكان پذير است. انديس شماره محل ذخيره*سازي داده*هاي ما مي*باشد كه با دادن اين شماره مي*توانيم به داده مورد نظر دسترسي پيدا كنيم. در C# همانند C و C++ انديس خانه*هاي آرايه از صفر آغاز مي*گردد يعني اولين خانه آرايه داراي شماره صفر است و عناصر بعدي به ترتيب يك واحد به انديسشان اضافه مي*گردد. پس شماره انديس آرايه هميشه يك واحد كمتر از تعداد عناصر آن است، يعني آرايه*اي كه 10 عضو دارد بزرگترين انديس خانه*هايش 9 مي*باشد. دسترسي به عناصر هر يك از ابعاد آرايه با انديس امكان پذير است. معمولاً به بعد اول آرايه سطر و به بعد دوم آن ستون مي*گويد. مثلاً monthArray[3,7] عنصر واقع در سطر 3 و ستون 7 آرايه را مشخص مي*نمايد.(توجه داشته باشيد كه انديس دهي آرايه از صفر آغاز مي*شود و بعنوان مثال intArray[12] به خانه شماره 12 آرايه اشاره مي*كند اما فراموش نكنيد چون انديس آرايه از صفر آغاز مي*شود خانه شماره 12 آرايه، سيزدهمين داده شما را در خود جاي مي*دهد.)
    12
    11
    10
    9
    8
    7
    6
    5
    4
    3
    2
    1
    0

    اگر شكل فوق را آرايه*اي تك بعدي تصور نماييد، مشاهده مي*نماييد كه خانه شماره 5 آرايه حاوي اطلاعات مربوط به ششمين داده ورودي شما مي*باشد.

    نكته ديگري كه بايد در مورد تعريف آرايه*هاي اين مثال متذكر شوم در مورد آريه*هائيست كه از نوع string تعريف مي*شوند. دوستاني كه با زبان C كار كرد*ه*اند حتماً مي*دانند كه آرايه*اي از نوع رشته*اي در C وجود ندارد و براي نگهداري چندين رشته در يك آرايه بايد از آرايه دو بعدي استفاده كرد. در C# اين قابليت فراهم شده تا با استفاده از يك آرايه تك بعدي بتوان چندين رشته را ذخيره نمود بدين صورت كه هر يك از عناصر آرايه نك بعدي محلي براي ذخيره*سازي يك رشته است و همانند زبان C نياز به پردازش*هاي گاه پيچيده بر روي آرايه*هاي چند بعدي بمنظور كار با رشته*ها، وجود ندارد. بعنوان يك توضيح كمي اختصاصي عرض مي*كنم كه در زبان*هايي مانند C، در صورتيكه مي*خواستيد چندين رشته را در آرايه*اي ذخيره كنيد تا بتوانيد با انديس به آنها دسترسي داشته باشيد، مجبور به تعريف يك آرايه دو بعدي بوديد كه با استفاده از تنها انديس اول آرايه مي*توانستيد به عناصر رشته*اي آرايه دسترسي پيدا كنيد، اما در C# تنها با استفاده از يك آرايه تك بعدي مي*توان همان كار را انجام داد.
    کد:
    string[] stringArray = {"My name is Meysam", "This is C# Persian Blog"}
    …..
    Console.WriteLine("{0}",stringArray[0]);
    …..
    همانطور كه در اين مثال ملاحظه مي*كنيد، آرايه*اي از نوع رشته تعريف شده و دو عنصر به آن تخصيص داده شده است و در جايي در متن برنامه با استفاده از انديس از اولين عنصر اين آرايه براي نمايش در خروجي استفاده گرديده است. خروجي اين برنامه به شكل زير است :
    کد:
     My name is Meysam


    مطلب اين درس در اينجا به پايان مي*رسد. در صورتيكه نياز داريد تا در مورد عملگرهاي زبان C# بيشتر توضيح دهم حتماً ذكر كنيد تا در مطلب بعدي توضيح كاملتري در مورد آنها براي شما تهيه كنم. خيلي دوست داشتم كه در مورد تمام عملگرهاي زبان C# در همين درس توضيح بدهم اما هم فرصت اندك است و هم حجم مطلب اين قسمت زياد مي*شد و هم اينكه فكر كردم احتمالاً دوستان با اين عملگرها آشنايي دارند. نكته* ديگري كه بايد به آن اشاره كنم و اينست كه در اين سايت سعي شده است تا زبان برنامه*نويسي C# به سادگي و به سرعت آموزش داده شود و علت اينكه به برخي از جزئيات تخصصي پرداخته نمي*شود نيز همين مطلب مي*باشد. در آينده در مورد آرايه*ها بيشتر صحبت مي*كنم چون عناصر مفيد و سودمندي هستند. اميد است پس از كامل كردن مطالب مقدماتي در اين سايت و با همكاري شما عزيزان بتوانم به مطالب پيشرفته*تري از زبان C# بپردازم. بيان نظرات و پيشنهادات شما چه در زمينه مطالب ارائه شده و چه در زمينه متن ارائه شده به شما از لحاظ سادگي و رواني در درك، مرا در امر بهبود مطالب ياري مي*نمايد.
    با M.S.P Soft به دنياي برنامه نويسي وارد شويد[برای نمایش لینک باید عضو شوید. ]
نمایش نتایج: از 1 به 5 از 5

اطلاعات موضوع

کاربرانی که در حال مشاهده این موضوع هستند

در حال حاضر 1 کاربر در حال مشاهده این موضوع است. (0 کاربران و 1 مهمان ها)

موضوعات مشابه

  1. ارتباط پایگاه داده Access با Visual Basic از طریق کد نویسی
    توسط MspSoft در انجمن برنامه نویسی در 6 VB
    پاسخ: 3
    آخرين نوشته: 2013-05-06, 11:33 PM
  2. پاسخ: 29
    آخرين نوشته: 2012-01-05, 08:10 AM
  3. نحوه ارسال ایمیل در VB.Net 2005
    توسط MspSoft در انجمن VB.NET
    پاسخ: 0
    آخرين نوشته: 2011-12-10, 10:29 PM
  4. آموزش تصویری نصب ویژوال استادیو - Visual Studio
    توسط MspSoft در انجمن برنامه نویسی مبتنی بر Microsoft .Net Framework
    پاسخ: 0
    آخرين نوشته: 2011-11-30, 03:33 PM
  5. انواع داده ای در Visual Basic.NET
    توسط MspSoft در انجمن VB.NET
    پاسخ: 0
    آخرين نوشته: 2011-11-25, 09:34 AM

کلمات کلیدی این موضوع

مجوز های ارسال و ویرایش

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

Content Relevant URLs by vBSEO 3.6.0 RC 2