آموزش برنامه نویسی

آموزشگاه تحلیل داده ارایه دهنده به روز ترین مطالب آموزشی و متدلوژی های برنامه نویسی است که در این زمینه بی رقیب است

آموزش برنامه نویسی

آموزشگاه تحلیل داده ارایه دهنده به روز ترین مطالب آموزشی و متدلوژی های برنامه نویسی است که در این زمینه بی رقیب است

آموزش برنامه نویسی

آموزشگاه تحلیل داده مفتخر به آموزش و برپایی دوره های مقدماتی برنامه نویسی تا سطوح پیشرفته و معماری نرم افزار با بیش از پانزده سال در خدمت جویندگان علم و مهارت آموزان باشد.
آموزشگاه تحلیل داده ارایه دهنده به روز ترین مطالب آموزشی و متدلوژی های برنامه نویسی است که در این زمینه بی رقیب است
شما عزیزان می توانید با خیال آسوده تمرکزی جز اهداف خویش نداشته باشید
دوره های جدید تحلیل داده در راه است.....
برای اطلاع از این دوره ها با شماره 02188146330 یا 02188146323 تماس حاصل نمایید

۶ مطلب با کلمه‌ی کلیدی «آموزش #C» ثبت شده است

آموزش کار با آرایه ها Arrays در زبان C# :

سلام با آموزش برنامه نویسی سی شارپ قسمت هفتم در خدمت شما عزیزان هستیم, در قسمت قبلی با روش Method overloading در زبان C# آشنا شدیم. ادامه آموزش سی شارپ :

آرایه ها Arrays مجموعه ای از آیتم ها مثل متن String می باشند. شما می توانید از آرایه ها برای قرار دادن چندین متغیر همسان در یک گروه و سپس انجام اعمال خاصی بر روی آن ها مثل مرتب سازی یا sorting استفاده کنید.
آرایه ها در C# تقریبا شبیه متغیرها تعریف می شوند با این فرق که یک [ ] در مقابل نوع داده ای آرایه قرار می گیرد. ساختار کلی تعریف یک آرایه در C# به صورت زیر است :

string[] names;

برای استفاده از یک آرایه نیاز دارید آن را تعریف اولیه و مقداردهی کنید. به صورت زیر :

string[] names = new string[2];

در کد فوق، عدد 2 سایز آرایه را تعیین می کند. سایز آرایه تعداد اعضایی که می توانید در آرایه قرار دهید را مشخص می سازد. قرار دادن آیتم ها در یک Arrays کار ساده ای است. به صورت زیر :

names[0] = "John Doe";

اما چرا در تعریف اولین عضو آرایه از عدد 0 استفاده کردیم. به دلیل این که در C# همانند سایر زبان های برنامه نویسی، شمارش واحدها به جای 1 از 0 شروع می شود. بنابراین اولین عضو آرایه با 0 اندیس گذاری شده، دومی با 1 و به این ترتیب.
شما بایستی به تعداد اعضای یک آرایه دقت کنید، زیرا تعریف عضو بیشتر از تعداد تعیین شده برای آرایه، برنامه را دچار خطا می کند. دقت کنید وقتی یک آرایه با 2 عضو تعیین می شود، اعضای آن دارای اندیس های 0 و 1 هستند و عضوی با 2 اندیس وجود ندارد. این یک اشتباه رایج در هنگام استفاده از آرایه هاست.
در درس های قبل تر، با ساختارهای تکرار (حلقه) در C# آشنا شدید، این ساختارها برای کار با آرایه ها بسیار مناسب هستند.
رایج ترین راه برای استخراج اطلاعات یک آرایه Arrays استفاده از حلقه ها یا loops می باشد. در هر بار تکرار حلقه، یک عضو آرایه استخراج شده و می توان عملیات مورد نظر خود را بر روی آن انجام داد. در مثال عملی زیر، نحوه خواندن و کار با یک آرایه را به وسیله حلقه loop نشان داده ایم :

using System;

using System.Collections;

namespace ConsoleApplication1

{

class Program

{

static void Main(string[] args)

{

string[] names = new string[2];

names[0] = "John Doe";

names[1] = "Jane Doe";

foreach(string s in names)

Console.WriteLine(s);

Console.ReadLine();

}

}

}

در مثال فوق، از حلقه foreach استفاده کردیم که ساده ترین نوع حلقه برای کار با آرایه هاست. اما می توان از سایر انواع حلقه ها در C# نیز استفدده نمود، مثل حلقه for که به راحتی به وسیله آن می توان اعضای یک آرایه را شمرد و به تعداد اعضا پیام در خروجی چاپ کرد :

for(int i = 0; i < names.Length; i++)

Console.WriteLine("Item number " + i + ": " + names[i]);

کارکرد کد فوق بسیار ساده است. ما از اندازه طول آرایه (Arrays Length) برای تعیین این که حلقه بایستی چند بار تکرار شود، استفاده کرده ایم. همچنین از شمارنده Counter(i) برای فهمیدن این که هر لحظه در کجای پردازش آرایه بوده و برای بیرون کشیدن هریک از اعضای آن استفاده نموده ایم. همانطور که در هنگام تعریف و مقداردهی آرایه از یک عدد به نام اندیس یا indexer استفاده کردیم، از همان عدد می توان برای خواندن و بیرون کشیدن اعضای آرایه استفاده نمود.
در بخش قبل گفتیم که می توان اعضای یک آرایه را مرتب یا sort کرد. این کار بسیار راحت است. کلاس Array Class شامل چندین متد (method) مختلف است که از آن ها می توانید برای کار با آرایه ها استفاده کنید. در مثال زیر اعداد به جای string یا متن استفاده کرده ایم تا منظور خاصی را نشان دهیم، وگرنه به همین سادگی می توان اعضای یک آرایه را از نوع string هم تعریف کرد. روش بسیار ساده تر دیگری نیز برای پر کردن و مقداردهی اعضای یک آرایه وجود دارد، به خصوص زمانی که اعضای آرایه شما مشخص و مرتب هستند. به صورت زیر :

int[] numbers = new int[5] { 4, 3, 8, 0, 5 };

فقط با استفاده از یک خط کد، آرایه ای با 5 عضو را ایجاد نموده و پنج عدد یا integer را به عنوان اعضای آن مقداردهی کردیم.
با پر کردن اعضای یک آرایه به روش فوق، شما یک مزیت دیگر در کد خود خواهید داشت. با روش فوق، کامپایلر تعداد اعضای تعریف شده برای آرایه را با تعداد آیتم های شما چک کرده و اگر بیشتر از تعداد اعضا، آیتم ارائه دهید، خطا رخ می دهد. درواقع کد فوق را به صورت زیر می توان خلاصه تر نوشت، ولی در این حالت چک کردن خودکار کامپایلر را از دست می دهیم :

int[] numbers = { 4, 3, 8, 0, 5 };

اما بیایید نحوه مرتب کردن یا sort یک آرایه را باهم بررسی کنیم. مثال زیر را به دقت مطالعه کنید :

using System;

using System.Collections;

namespace ConsoleApplication1

{

class Program

{

static void Main(string[] args)

{

int[] numbers = { 4, 3, 8, 0, 5 };

Array.Sort(numbers);

foreach(int i in numbers)

Console.WriteLine(i);

Console.ReadLine();

}

}

}

تنها چیز جدید در کد مثال فوق، دستور Array.Sort است. این متد می تواند پارامترهای مختلفی را به عنوان ورودی دریافت کرده و در هر کدام یک نوع آرایه را مرتب خواهد کرد. مثلا نزولی، صعودی و یا ... .
کلاس Array Class دارای متدهای مختلف دیگری برای کار با آرایه ها مثل متد Reverse() است که به وسیله آن می توان ترتیب اعضای یک آرایه را معکوس کرد. برای درک بهتر، به لیست کامل متدهای آرایه ها در C# بروید.
آرایه هایی که در مثال های این درس استفاده کردیم، همه تک بعدی هستند، ولی آرایه ها در C# می توانند 2 یا 3 بعدی نیز باشند. به این آرایه ها آرایه های تو در تو یا ماتریس هم می گویند.
آرایه های چند بعدی در C# به 2 دسته تقسیم می شوند :

  • آرایه های مستطیلی یا Rectangular Array.
  • آرایه های نامنظم یا Jagged Array.

فرق بین دو نوع آرایه فوق در این است که هر بعد آرایه های مستطیلی بایستی یک اندازه باشند، مثلا یک آرایه ها 4×4.
اما هر بعد آرایه های Jagged Array می توانند دارای سایزهای مختلفی باشند. بحث در مورد آرایه چند بعدی بسیار گسترده بوده و خارج از حوصله این آموزش می باشد.

آموزش سی شارپ ادامه دارد

لینک قسمت اول : آموزش #C



۰ نظر موافقین ۰ مخالفین ۰ ۲۶ آذر ۹۸ ، ۱۴:۱۴
افشین رفوا

 

سلام با آموزش برنامه نویسی سی شارپ قسمت ششم در خدمت شما عزیزان هستیم, در قسمت قبلی با کلاسها ,خواص Properties ,کار با تابع سازنده Constructor و تابع تخریب کننده یا Destructor در زبان C# آشنا شدیم. ادامه آموزش سی شارپ :

آموزش کار با روش Method overloading در C# :

بسیاری از زبان های برنامه نویسی از تکنیک ای به نام پارامترهای پیش فرض /اختیاری (defult/optional parameters) پشتیبانی می کنند. این تکنیک به برنامه امکان می دهد تا با تعیین مقدار پیش فرض برای یک یا چند پارامتر تابع، آن ها را در هنگام مقدار دهی اختیار کند. این روش برای افزودن انعطاف پذیری به کد برنامه، بسیار کاربرد دارد.
برای مثال، می خواهید قابلیت کارکرد را به تابع ای که یک یا چند پارامتر ورودی دارد، بدهید. در اینگونه موارد، به دلیل عدم ارسال تعداد مورد نیاز پارامتر در هنگام فراخوانی، ممکن است کد شما درست اجرا نشود. برای حل این مسئله، می توانید از امکان جدید تعیین پارامترهای اختیاری یا optional استفاده کنید. در این روش، شما برای برخی پارامترها یک مقدار پیش فرضی یا default تعیین کرده که حتی اگر در هنگام فراخوانی تابع، مقداری برای آن ارسال نشد، کد دچار مشکل نشود.
پارامترهای پیش فرض (default parameters) در زبان C# 4.0 معرفی شدند، اما تا قبل از آن برنامه نویسان از تکنیکی تقریبا مشابه به نام method overloading استفاده می کردند. در این حالت، برنامه نویس چندین تابع هم نام ولی با مجموعه پارامترهای مختلف را تعریف می کند. برای مثال متد اول یک پارامتر و متد دوم دو پارامتر دریافت می کند. یک مثال مناسب برای این روش، تابع Substring از کلاس String Class است. به صورت زیر :

string Substring (int startIndex)

string Substring (int startIndex, int length)

شما می توانید تابع فوق را با یک یا دو پارامتر فراخوانی کنید. اگر تابع را با یک پارامتر فراخوانی کنید حالت اول و اگر با دو پارامتر فراخوانی کنید، حالت دوم اجرا می شود.
بنابراین با تعیین شکل های مختلف از یک تابع، می توانید حجم کد نویسی را تا حدود زیادی کاهش دهیم. برای این منظور، کاری می کنیم تا متد ساده و معمولی، کد سایر متدها را تولید و اجرا کند. به مثال زیر دقت کنید :

class SillyMath

{

public static int Plus(int number1, int number2)

{

return Plus(number1, number2, 0);

}

public static int Plus(int number1, int number2, int number3)

{

return number1 + number2 + number3;

}

}

در کد مثال فوق، تابع Plus را با دو حالت تعریف کرده ایم. در حالت اول، تابع دو پارامتر را جهت جمع کردن 2 عدد دریافت می کند، درحالی که حالت دوم سه پارامتر دارد. درواقع کار اصلی را نسخه 3 پارامتری تابع انجام می دهد. اگر بخواهیم دو عدد را جمع کنیم، خیلی ساده، تابع با حالت 3 پارامتری را فراخوانی کرده و عدد 0 را به پارامتر سوم پاس می دهیم. تا به عنوان مقدار پیش فرض برای آن استفاده شود. کد مثال فوق، منظور ما در بخش قبل را نشان می دهد.
حال اگر بخواهید تا 4 عدد را با هم جمع کنید، می توانید یک نسخه 4 پارامتری دیگر را نیز به برنامه اضافه کنید. به صورت کد زیر :

class SillyMath

{

public static int Plus(int number1, int number2)

{

return Plus(number1, number2, 0);

}

 

public static int Plus(int number1, int number2, int number3)

{

return Plus(number1, number2, number3, 0);

}

 

public static int Plus(int number1, int number2, int number3, int number4)

{

return number1 + number2 + number3 + number4;

}

}

مثال فوق خیلی ساده تکنیک method overloading را در C# نشان داده و نحوه ارتباط دادن توابع با هم را بیان می کند.

 

آموزش سطح دسترسی(Access Modifier) در C#

با تعیین بازه دسترسی یک کلاس، متد، متغیر یا ویژگی در C#، روش و امکان دسترسی به آن عنصر و دیده شدن در سطح کل برنامه را تعیین می کند. به این امکان در اصطلاح سطح دسترسی یا access modifier می گویند.
رایج ترین حالت ها برای access modifier در C#، خصوصی Private و عمومی Public است، اما حالت های دیگری نیز وجود دارد که در لیست زیر به معرفی آن ها پرداخته ایم. برخی از موارد زیر ممکن است تاکنون مورد استفاده شما قرار گرفته باشد، اما دانستن آن ها ضروری است.

  • عمومی Public : در این حالت عنصر به صورت عمومی تعریف شده و از هر جای برنامه توسط هر عنصر دیگر مثل سایر کلاس ها و توابع قابل دسترسی است. این حالت دارای حداقل محدودیت برای عنصر بوده و Enums و Interface ها به صورت پیش فرض public هستند.
  • محافظت شده یا Protected : در این حالت عنصر فقط توسط عوامل کلاس خود یا کلاس هایی که از کلاس آن به ارث رفته اند، قابل دسترس است.
  • درونی یا internal : در این حالت عنصر فقط درون پروژه جاری قابل دسترسی است.
  • درونی محافظت شده یا Protected internal : این حالت، همانند حالت internal است با این تفاوت که عناصر موجود در کلاس هایی که از کلاس عنصر به ارث رفته اند، حتی اگر در پروژه های دیگر باشند قابلیت دسترسی به آن را دارند.
  • خصوصی یا Private : در این حالت فقط اعضای همان کلاس امکان دسترسی به آیتم مورد نظر را دارند. این حالت دارای بیشترین میزان محدودیت بوده و Class ها و Struct ها به صورت پیش فرض خصوصی private هستند.

برای مثال، اگر شما دارای دو کلاس به نام های Class 1 و Class 2 باشید، اعضای private مربوط به Class 1 فقط درون خود آن کلاس قابل دسترس هستند. شما نمی توانید یک نمونه از اشیای Class 1 را در Class 2 ساخته و امکان دسترسی به آن ها را داشته باشید.
اما اگر Class 2 از Class 1 به ارث رفته یاشد (فرزند آن باشد) که در اصطلاح می گوییم inherit شده، فقط اعضای غیر private کلاس 1 در کلاس 2 قابل دسترس هستند.

 

پایان قسمت ششم آموزش سی شارپ

قسمت اول آموزش #C

۰ نظر موافقین ۰ مخالفین ۰ ۱۹ آذر ۹۸ ، ۱۵:۴۵
افشین رفوا

آموزش #C-آموزش سی شارپ:قسمت پنجم

آموزش سی شارپ
آموزش سی شارپ

سلام با آموزش برنامه نویسی سی شارپ قسمت پنجم در خدمت شما عزیزان هستیم, در قسمت قبلی با پارامترهای توابع ,کار با آرایه ها Arrays آشنا شدیم. ادامه آموزش برنامه نویسی #C :

آموزش کار با کلاس ها در C# :

در این درس قصد داریم تا شما را با مفهوم کلاس ( class ) در C# و کاربرد آن ها آشنا کنیم. همچنین به بیان نحوه تعریف کلاس ها در برنامه و تعیین خواص و متدها برای آن ها خواهیم پرداخت.
اول از همه با مفهوم کلاس Class در C# شروع می کنیم. یک کلاس، مجموعه ای از خاصیت ها، متغیرها و متدهای مرتبط با هم است. یک کلاس خصوصیات ذکر شده را توصیف و پیاده سازی کرده و برای استفاده از آن در کد برنامه، بایستی یک نسخه از آن را (که به آن شی یا object می گویند) بسازید. بر روی شی یا object ایجاد شده، می توانید متغیرها و متدهای کلاس را به کار ببرید. هر تعداد که نیاز داشته باشید می توانید شی یا object از روی کلاس ساخته و در نقاط مختلف کد برنامه استفاده کنید.
مبحث شی گرایی یا object oriented یک مقوله بسیار گسترده است که در این درس، درس های دیگر این بخش به مهم ترین جزئیات آن خواهیم پرداخت.
در بخش مقدمه آموزش C# و در مثال Hello World مشاهده کردید که از یک کلاس در کد برنامه استفاده شده بود در C# تقریبا همه چیز بر مبنای کلاس ها ایجاد می شوند. در کد این درس قصد داریم تا کلاس خود را گسترش داده و با انواع امکانات آن آشنا شویم :

using System;

namespace ConsoleApplication1

{

class Program

{

static void Main(string[] args)

{

Car car;

car = new Car("Red");

Console.WriteLine(car.Describe());

car = new Car("Green");

Console.WriteLine(car.Describe());

Console.ReadLine();

}

}

class Car

{

private string color;

public Car(string color)

{

this.color = color;

}

public string Describe()

{

return "This car is " + Color;

}

public string Color

{

get { return color; }

set { color = value; }

}

}

}

همانطور که مشاهده می کنید، در کد فوق یک کلاس جدید به نام Car ایجاد کرده ایم. برای سهولت کار، این کلاس جدید را به همراه کلاس Program در فایل اصلی برنامه قرار داده ایم، اما روش رایج این است که هر کلاس درون فایلی جداگانه هم نام خود کلاس ایجاد شود. کلاس Car دارای یک متغیر (ویژگی) به نام Color است که برای تعیین رنگ خودرو به کار می رود. ویژگی Color به صورت خصوصی یا private تعیین شده که به این معناست که توابع و کلاس های خارج از تابع Car امکان دسترسی مستقیم به این خاصیت را ندارند. فقط توابع و متدهای داخل کلاس Car می توانند به خاصیت Color دسترسی مستقیم داشته باشند.

نکته :

اگر تابع یا کلاسی خارج از کلاس Car بخواهد به خاصیت خصوصی یا private به نام Color دسترسی داشته باشد، بایستی از یک Property برای این منظور استفاده کند. یک Property به نام Color در انتهای کد کلاس Car تعریف شده که وظیفه خواندن و نوشتن این خاصیت را بر عهده داشته و به سایر کلاس ها و توابع برنامه اجازه دسترسی به آن را می دهد.

همچنین کلاس Car دارای یک تابع سازنده یا Constructor می باشد. تابع سازنده، متدی است که وظیفه ساخت یک نمونه شی از کلاس مربوطه و برگردندن آن را به عهده داشته و به محض ساخته شدن یک نمونه شیء از کلاس اجرا می شود. تابع سازنده کلاس Car دارای یک پارامتر بوده که برای مقداردهی اولیه شی Car با خاصیت Color بزرگ قرمز (Red) به کار می رود. بنابراین هر شی از کلاس Car که ساخته شود، رنگ قرمز را به صورت پیش فرض برای خاصیت Color خود خواهد داشت. برای نشان دادن درستی این مسئله نیز تابع Describe طراحی شده که نام هر شی یا object ساخته شده با مقدار رنگ آن را در خروجی نشان می دهد.
در قسمت های بعدی به آموزش مفاهیمی همچون خواص (Properties)، تابع سازنده (Constructor) و بازه دید (Visibility) خواهیم پرداخت.

آموزش خواص Properties در کلاس های زبان C# :

آموزش سی شارپ

ویژگی (Property) در C# به شما امکان کنترل روش دسترسی و تغییر متغیرهای یک کلاس را می دهد. استفاده از ویژگی در C#، راه توصیه شده و درست جهت دسترسی به متغیرهای یک کلاس، به وسیله متدها یا توابع خارج از کلاس جاری، در زبان برنامه نویسی شی گرا object oriented می باشد. به عبارت دیگر، وقتی که یک متد یا کلاس دیگری در برنامه، بخواهد به متغیر یک کلاس دسترسی داشته باشد، بهتر است به جای این که مستقیما متغیر را استفاده کند، از طریق یک ویژگی یا Property در کلاس خود متغیر، به آن دسترسی داشته باشد.
در مثال آموزشی درس قبل (کار با کلاس ها) برای اولین بار روش استفاده از یک ویژگی یا Property را نشان دادیم. یک ویژگی یا Property همانند ترکیبی از یک متغیر Variable و یک متد method است. ویژگی نمی تواند پارامتری را دریافت کند، اما به وسیله آن می توانید قبل از ارسال و دریافت متغیر، مقدار آن را تغییر دهید. هر ویژگی یا Property از دو قسمت اصلی get و set تشکیل شده که همانند کد مثال زیر درون مجموعه Property تعریف می شوند :

private string color;

public string Color

{

get { return color; }

set { color = value; }

}

متد get مقدار متغیر را خوانده و آن را به برنامه بر می گرداند، از طرف دیگر متد set هم مقدار مورد نظر را به متغیر نسبت می دهد. مثال اول، ساده ترین حالت تعریف Property در C# است، اما می توانید آن را گسترش نیز بدهید.

نکته مهم :

مسئله مهم در هنگام تعریف یک ویژگی یا Property این است که تعریف یکی از متدهای set یا get نیز کفایت می کند و در صورت تعریف یکی، تعریف متد دیگر اختیاری است. این مسئله، امکان تعریف ویژگی های فقط خواندنی read-only و یا فقط نوشتنی write-only را می دهد.

در کد زیر یک مثال کامل تر از نحوه تعریف ویژگی ها در C# را نشان داده ایم :

public string Color

{

get

{

return color.ToUpper();

}

set

{

if(value == "Red")

color = value;

else

Console.WriteLine("This car can only be red!");

}

}

در کد مثال فوق، ویژگی را کمی گسترش دادیم. در کد جدید، متغیر Color در هنگام return، به دلیل استفاده از متد ToUpper() به صورت حروف بزرگ، برگردانده می شود. از طرف دیگر، با استفاده از دستور شرطی if، فقط مقدار رنگ “red” برای متغیر Color پذیرفته می شود.

آموزش کار با تابع سازنده Constructor در زبان C# :

تابع سازنده یا Constructor متد ویژه ای است که هر بار به محض ساخته شدن یک شی یا object از کلاس، اجرا می شود. درواقع از تابع سازنده برای مقداردهی اولیه متغیرها یا اجرای یک کد ثابت استفاده می شود.
یک تابع سازنده هیچ گاه مقدار خروجی یا return ندارد و به همین دلیل در تعریف آن، هیچ نوع متغیری جهت return تعریف نمی شود. ساختار کلی تعریف تابع سازنده Constructor در کلاس های C# به صورت زیر است :

public ClassName()

به همین روش تابع سازنده کلاس Car را به صورت زیر نیز می توانید تعریف کنید :

public Car()

در مثال عملی این درس، کلاسی به نام Car داریم که دارای یک تابع سازنده بوده که یک پارامتر متنی String را به عنوان ورودی دریافت می کند. البته تابع های سازنده در C# می توانند overload نیز شوند. یعنی این که ما چندین تابع سازنده هم نام برای یک کلاس داشته باشیم، ولی پارامترهای ورودی آن ها با هم متفاوت باشد. کلاس زیر یک کد عمل را نشان می دهد :

public Car()

{

}

public Car(string color)

{

this.color = color;

}

یک تابع سازنده، می تواند تابع سازنده دیگر را فراخوانی کند که به صورت های مختلف ممکن است کد زیر یک مثال در این زمینه ارائه داده است :

public Car()

{

Console.WriteLine("Constructor with no parameters called!");

}

public Car(string color) : this()

{

this.color = color;

Console.WriteLine("Constructor with color parameter called!");

}

اگر متد مثال فوق را اجرا کنید، خواهید دید که تابع سازنده ای که هیچ پارامتری را به عنوان ورودی ندارد، ابتدا اجرا می شود. از این حالت برای مقداردهی اشیا (objects) یک کلاس با یک تابع سازنده پیش فرض استفاده می شود.
اگر بخواهید که تابع سازنده دار ای پارامتر فراخوانی شود، می توانید به صورت کد زیر عمل کنید :

ublic Car(string color) : this()

{

this.color = color;

Console.WriteLine("Constructor with color parameter called!");

}

public Car(string param1, string param2) : this(param1)

{

}

نکته : اگر شما تابع سازنده ای که دارای 2 پارامتر است را فراخوانی کنید، پارامتر اول برای فراخوانی تابع سازنده ای که دارای 1 پارامتر است، استفاده می شود.

آموزش سی شارپ

آموزش کار با تابع تخریب کننده یا Destructor در C# :

تابع تخریب کننده یا Destructor در زبان C#، متدی است که در هنگام از بین رفتن یک شی از کلاس، اجرا می شود. زبان C#، یک زبان پاک کننده خودکار سیستم یا garbage collector است. به این معنی که اشیایی که دیگر در برنامه نیاز ندارید را جهت خالی کردن حافظه و آزاد نمودن سیستم، پاک می کند.
از طرف دیگر در برخی موارد شاید نیاز داشته باشید تا یک Clean up در سیستم انجام دهید، اینجاست که تابع های تخریب کننده Destructor به کار می آیند.
تابع های تخریب کننده چندان شبیه سایر متدها در زبان C# نیستند. در کد عملی زیر یک مثال از تابع تخریب کننده نشان داده شده است :

~Car()

{

Console.WriteLine("Out..");

}

به محض این که شی ایجاد شده از کلاس، توسط تمیز کننده خودکار garbage collector جمع آوری شده، متد فوق فراخوانی می شود.

پایان قسمت چهارم آموزش برنامه نویسی سی شارپ

با ادامه آموزش سی شارپ

همراه ما باشید

۰ نظر موافقین ۰ مخالفین ۰ ۰۵ آذر ۹۸ ، ۱۱:۴۴
افشین رفوا

آموزش #C-آموزش سی شارپ:قسمت چهارم

سلام با آموزش برنامه نویسی سی شارپ قسمت چهارم در خدمت شما عزیزان هستیم, در قسمت قبلی با ساختارهای تکرار حلقه Loops , کار با توابع Function در سی شارپ آشنا شدیم. ادامه آموزش برنامه نویسی #C :

آموزش #C-آموزش سی شارپ
آموزش #C-آموزش سی شارپ

آموزش کار با پارامترهای تابع در زبان C#

آموزش سی شارپ

در درس قبلی، به طور کامل نحوه کار با تابع ها در C# و فراخوانی و استفاده آن ها را آموزش دادیم. تا حدودی به آموزش نحوه تعیین و ارسال پارامترهای تابع هم پرداختیم. اما در این درس به صورت اختصاصی قابلیت ها و کارکردهای پارامترها را بررسی خواهیم کرد.
اولین چیزی که به بررسی آن خواهیم پرداخت، تغییردهنده های ref و out یا modifiers هستند. زبان C# همانند اکثر زبان های برنامه نویسی دیگر، بین متغیرهای ارسال با مقدار “by value” و ارسال با رفرنس “by refrence” تفاوت قائل می شود.
حالت پیش فرض در زبان C#، ارسال با مقدار یا “by value” است. این حالت به معنای آن است که وقتی شما یک متغیر را به تابع ای به عنوان پارامتر ارسال می کنید، درواقع یک کپی از آن شی را می فرستید و نه رفرنس به آدرس عمل واقعی متغیر. از طرف دیگر این کار به این معنی است که شما می توانید تغییرات و عملیات مورد نظر خود را بر روی متغیر پارامتر ارسالی انجام دهید. بدون این که شی اصلی آن متغیر را در حافظه دستکاری نمایید و به عبارت دیگر هر کاری بر روی پارامتر در درون تابع انجام می دهید، بر روی نسخه کپی آن اجرا می شود نه متغیر اصلی.
با استفاده از واژه های کلیدی ref و out می توانید عملکرد فوق را تغییر داده و نسخه اصلی یک متغیر را به جای مقدار آن به تابع ارسال نمایید.

آموزش ref modifier :

کد مثال زیر را مطالعه نمایید :

static void Main(string[] args)

{

int number = 20;

AddFive(number);

Console.WriteLine(number);

Console.ReadKey();

}

static void AddFive(int number)

{

number = number + 5;

}

در کد مثال فوق، یک متغیر عددی به نام number از نوع integer تعریف کرده و مقدار 20 را به آن می دهیم. سپس این متغیر را به تابع AddFive() ارسال نموده سپس مقدار 5 واحد را به آن اضافه می کند. اما آیا متغیر واقعی number تغییر می کند؟
جواب خیر است، مقدار 5 به نسخه کپی متغیر number اضافه شده و فقط درون تابع مورد اشاره تغییر کرده است. زیرا ما یک نسخه کپی از متغیر number را ارسال کرده ایم، نه رفرنس به شی اصلی آن. این روش حالت پیش فرض در C# بوده و در بیشتر موارد مقصود ما هم همین است.
اما اگر بخواهید مقدار شی اصلی متغیر number را تغیر دهید، بایستی کلید واژه ref را همانند کد زیر به پارامتر اضافه نمایید :

static void Main(string[] args)

{

int number = 20;

AddFive(ref number);

Console.WriteLine(number);

Console.ReadKey();

}

static void AddFive(ref int number)

{

number = number + 5;

}

همانطور که در کد فوق مشاهده می کنید، ما علاوه بر این که در هنگام تعریف تابع، واژه کلیدی ref را به کار برده ایم، در هنگام فراخوانی تابع هم استفاده شده است.
اگر برنامه فوق را اجرا کنید، خواهید دید که مقدار اصلی متغیر number تغییر کرده است، نه نسخه کپی آن.

آموزش سی شارپ

آموزش تغییر دهنده out modifier :

تغییردهنده out modifier بسیار شبیه ref عمل می کند. هر دو آن ها باعث می شود تا نسخه اصلی و رفرنس متغیر به عنوان پارامتر ارسال شود و نه مقدار آن. اما دارای دو تفاوت عمده با هم هستند :

  1. متغیری که به ref modifier ارسال می شود، حتما بایستی قبل از فراخوانی تابع مقداردهی اولیه شده باشد. اما این مورد درباره out صورت نکرده و شما می توانید یک متغیر مقداردهی نشده را به out ارسال کنید.
  2. از طرف دیگر شما نمی توانید بدون این که به یک متغیر out مقدار بدهید، تابع مورد نظر خود را به پارامتر out فراخوانی کنید. درست است که می توانید یک متغیر مقداردهی اولیه نشده را به یک تابع به عنوان out Parameter ارسال کنید، اما برای استفاده از آن در بدنه تابع، بایستی مقدار جدیدی را برای آن تعریف کنید.

آموزش تغییر دهنده Params modifier :

تا اینجا، توابعی که تعریف کردیم، تعداد مشخصی پارامتر را در هنگام تعریف یا فراخوانی دریافت می کردند. اما مواردی وجود دارد که ممکن است شما بخواهید تابع مورد نظرتان تعداد متفاوتی پارامتر را در هر بار فراخوانی دریافت و ارسال کند. این کار با ارسال یک متغیر مثل آرایه به تابع همانند روش زیر امکان پذیر است :

static void GreetPersons(string[] names) { }

البته فراخوانی این نوع تابع ها کمی پیچیده تر از حالت معمولی است، به صورت زیر :

GreetPersons(new string[] { "John", "Jane", "Tarzan" });

روش فوق کاملا درست، اما می توان آن را به صورت زیر بهتر بنویسید. با استفاده از واژه کلیدی Params :

static void GreetPersons(params string[] names) { }

کد فراخوانی فوق همانند فراخوانی به صورت زیر است :

GreetPersons("John", "Jane", "Tarzan");

مزیت دیگر استفاده از کلید واژه Params این است که شما می توانید پارامترهای خالی (2re, Parameters) را هم به تابع ارسال کنید.
در هنگام استفاده از Params، تابع می تواند انواع دیگری از پارامترها را نیز دریافت کند، منتهی پارامترهای Params بایستی در انتها تعریف شوند. از طرف دیگر فقط از یک پارامتر Params در تعریف و فراخوانی هر تابع می توان استفاده کرد.
کد مثال زیر، مثال کاملی از نحوه استفاده از Params در C# است :

static void Main(string[] args)

{

GreetPersons(0);

GreetPersons(25, "John", "Jane", "Tarzan");

Console.ReadKey();

}

static void GreetPersons(int someUnusedParameter, params string[] names)

{

foreach(string name in names)

آموزش سی شارپ

آموزش کار با آرایه ها Arrays در زبان C#

آرایه ها Arrays مجموعه ای از آیتم ها مثل متن String می باشند. شما می توانید از آرایه ها برای قرار دادن چندین متغیر همسان در یک گروه و سپس انجام اعمال خاصی بر روی آن ها مثل مرتب سازی یا sorting استفاده کنید.
آرایه ها در C# تقریبا شبیه متغیرها تعریف می شوند با این فرق که یک [ ] در مقابل نوع داده ای آرایه قرار می گیرد. ساختار کلی تعریف یک آرایه در C# به صورت زیر است :

string[] names;

برای استفاده از یک آرایه نیاز دارید آن را تعریف اولیه و مقداردهی کنید. به صورت زیر :

string[] names = new string[2];

در کد فوق، عدد 2 سایز آرایه را تعیین می کند. سایز آرایه تعداد اعضایی که می توانید در آرایه قرار دهید را مشخص می سازد. قرار دادن آیتم ها در یک Arrays کار ساده ای است. به صورت زیر :

names[0] = "John Doe";

اما چرا در تعریف اولین عضو آرایه از عدد 0 استفاده کردیم. به دلیل این که در C# همانند سایر زبان های برنامه نویسی، شمارش واحدها به جای 1 از 0 شروع می شود. بنابراین اولین عضو آرایه با 0 اندیس گذاری شده، دومی با 1 و به این ترتیب.
شما بایستی به تعداد اعضای یک آرایه دقت کنید، زیرا تعریف عضو بیشتر از تعداد تعیین شده برای آرایه، برنامه را دچار خطا می کند. دقت کنید وقتی یک آرایه با 2 عضو تعیین می شود، اعضای آن دارای اندیس های 0 و 1 هستند و عضوی با 2 اندیس وجود ندارد. این یک اشتباه رایج در هنگام استفاده از آرایه هاست.
در درس های قبل تر، با ساختارهای تکرار (حلقه) در C# آشنا شدید، این ساختارها برای کار با آرایه ها بسیار مناسب هستند.
رایج ترین راه برای استخراج اطلاعات یک آرایه Arrays استفاده از حلقه ها یا loops می باشد. در هر بار تکرار حلقه، یک عضو آرایه استخراج شده و می توان عملیات مورد نظر خود را بر روی آن انجام داد. در مثال عملی زیر، نحوه خواندن و کار با یک آرایه را به وسیله حلقه loop نشان داده ایم :

using System;

using System.Collections;

namespace ConsoleApplication1

{

class Program

{

static void Main(string[] args)

{

string[] names = new string[2];

names[0] = "John Doe";

names[1] = "Jane Doe";

foreach(string s in names)

Console.WriteLine(s);

Console.ReadLine();

}

}

}

در مثال فوق، از حلقه foreach استفاده کردیم که ساده ترین نوع حلقه برای کار با آرایه هاست. اما می توان از سایر انواع حلقه ها در C# نیز استفدده نمود، مثل حلقه for که به راحتی به وسیله آن می توان اعضای یک آرایه را شمرد و به تعداد اعضا پیام در خروجی چاپ کرد :

for(int i = 0; i < names.Length; i++)

Console.WriteLine("Item number " + i + ": " + names[i]);

کارکرد کد فوق بسیار ساده است. ما از اندازه طول آرایه (Arrays Length) برای تعیین این که حلقه بایستی چند بار تکرار شود، استفاده کرده ایم. همچنین از شمارنده Counter(i) برای فهمیدن این که هر لحظه در کجای پردازش آرایه بوده و برای بیرون کشیدن هریک از اعضای آن استفاده نموده ایم. همانطور که در هنگام تعریف و مقداردهی آرایه از یک عدد به نام اندیس یا indexer استفاده کردیم، از همان عدد می توان برای خواندن و بیرون کشیدن اعضای آرایه استفاده نمود.
در بخش قبل گفتیم که می توان اعضای یک آرایه را مرتب یا sort کرد. این کار بسیار راحت است. کلاس Array Class شامل چندین متد (method) مختلف است که از آن ها می توانید برای کار با آرایه ها استفاده کنید. در مثال زیر اعداد به جای string یا متن استفاده کرده ایم تا منظور خاصی را نشان دهیم، وگرنه به همین سادگی می توان اعضای یک آرایه را از نوع string هم تعریف کرد. روش بسیار ساده تر دیگری نیز برای پر کردن و مقداردهی اعضای یک آرایه وجود دارد، به خصوص زمانی که اعضای آرایه شما مشخص و مرتب هستند. به صورت زیر :

int[] numbers = new int[5] { 4, 3, 8, 0, 5 };

فقط با استفاده از یک خط کد، آرایه ای با 5 عضو را ایجاد نموده و پنج عدد یا integer را به عنوان اعضای آن مقداردهی کردیم.
با پر کردن اعضای یک آرایه به روش فوق، شما یک مزیت دیگر در کد خود خواهید داشت. با روش فوق، کامپایلر تعداد اعضای تعریف شده برای آرایه را با تعداد آیتم های شما چک کرده و اگر بیشتر از تعداد اعضا، آیتم ارائه دهید، خطا رخ می دهد. درواقع کد فوق را به صورت زیر می توان خلاصه تر نوشت، ولی در این حالت چک کردن خودکار کامپایلر را از دست می دهیم :

int[] numbers = { 4, 3, 8, 0, 5 };

اما بیایید نحوه مرتب کردن یا sort یک آرایه را باهم بررسی کنیم. مثال زیر را به دقت مطالعه کنید :

using System;

using System.Collections;

namespace ConsoleApplication1

{

class Program

{

static void Main(string[] args)

{

int[] numbers = { 4, 3, 8, 0, 5 };

Array.Sort(numbers);

foreach(int i in numbers)

Console.WriteLine(i);

Console.ReadLine();

}

}

}تنها چیز جدید در کد مثال فوق، دستور Array.Sort است. این متد می تواند پارامترهای مختلفی را به عنوان ورودی دریافت کرده و در هر کدام یک نوع آرایه را مرتب خواهد کرد. مثلا نزولی، صعودی و یا ... .
کلاس Array Class دارای متدهای مختلف دیگری برای کار با آرایه ها مثل متد Reverse() است که به وسیله آن می توان ترتیب اعضای یک آرایه را معکوس کرد. برای درک بهتر، به لیست کامل متدهای آرایه ها در C# بروید.
آرایه هایی که در مثال های این درس استفاده کردیم، همه تک بعدی هستند، ولی آرایه ها در C# می توانند 2 یا 3 بعدی نیز باشند. به این آرایه ها آرایه های تو در تو یا ماتریس هم می گویند.
آرایه های چند بعدی در C# به 2 دسته تقسیم می شوند :

  • آرایه های مستطیلی یا Rectangular Array.
  • آرایه های نامنظم یا Jagged Array.

فرق بین دو نوع آرایه فوق در این است که هر بعد آرایه های مستطیلی بایستی یک اندازه باشند، مثلا یک آرایه ها 4×4.
اما هر بعد آرایه های Jagged Array می توانند دارای سایزهای مختلفی باشند. بحث در مورد آرایه چند بعدی بسیار گسترده بوده و خارج از حوصله این آموزش می باشد.

پایان قسمت چهارم آموزش برنامه نویسی سی شارپ

با ادامه آموزش سی شارپ

همراه ما باشید

۰ نظر موافقین ۰ مخالفین ۰ ۰۳ آذر ۹۸ ، ۱۶:۴۷
افشین رفوا

سلام با آموزش برنامه نویسی سی شارپ قسمت سوم در خدمت شما عزیزان هستیم, در قسمت قبلی با انواع داده ای Data Types , ساختار شرطی if و کار با دستور Switch در سی شارپ آشنا شدیم

آموزش کار با ساختارهای تکرار حلقه Loops در C#

یکی دیگر از تکنیک های اصلی در زمان نوشتن نرم افزارها، امکان ایجاد حلقه ها دستوری یا looping است. این نوع دستورات امکان تکرار بلوک هایی از کد برای دفعات دلخواه را می دهند. برای مثال ما می خواهیم گروهی از دستورات تا زمانی که مقدار یک متغیر مثلا کمتر از 10 است، تکرار شود، در این حالت بایستی از حلقه ها در C# استفاده کنیم.
در زبان C#، چهار نوع حلقه اصلی داریم که در ادامه به تشریح هر یک از آن ها با ارائه مثال های عملی خواهیم پرداخت .

آموزش سی شارپ

حلقه loop While :

حلقه While loop آسان ترین نوع حلقه در زبان C# بوده و به همین دلیل آموزش حلقه ها را از این حلقه شروع می کنیم. حلقه While loop مجموعه بلوک دستورات تعیین شده برای آن را تا زمانی که شرط تعیین شده برای حلقه درست true باشد، اجرا می کند. کد زیر یک مثال ساده از کاربرد حلقه While را نشان می دهد، در ادامه به تشریح بیشتر کد می پردازیم :

using System;

namespace ConsoleApplication1

{

class Program

{

static void Main(string[] args)

{

int number = 0;

while(number < 5)

{

Console.WriteLine(number);

number = number + 1;

}

Console.ReadLine();

}

}

}

برنامه را اجرا نمایید. لیستی از اعداد 0 تا 4 برای شما نمایش داده خواهد شد. متغیر number که درواقع شمارنده حلقه While مثال نیز هست، از عدد 0 شروع شده و هر بار که دستورات حلقه یک بار اجرا می شوند، مقدار آن یک واحد افزایش پیدا می کند.
تا زمانی که مقدار متغیر number کمتر از 5 و نه خود 5 باشد، اجرای دستورات ادامه پیدا کرده و با رسیدن عدد number به 5، اجرای حلقه متوقف شده و برنامه به خط کد بعد از حلقه While پرش می کند.

آموزش سی شارپ

حلقه do loop :

کارکرد حلقه do loop کمی متفاوت با حلقه While loop است. در حلقه do loop ابتدا دستورات بدنه حلقه یک بار اجرا شده و در پایان شرط حلقه چک می شود. در صورت درست بودن شرط، باز هم دستورات حلقه تکرار می شود.
نکته مهم در مورد حلقه do loop این است که اگر حتی شرط حلقه از ابتدا درست نباشد، دستورات حلقه حداقل یک بار اجرا می شوند.
کد زیر یک مثال عملی از کار با حلقه do loop را نشان می دهد :

do

{

Console.WriteLine(number);

number = number + 1;

} while(number < 5);

خروجی حلقه do loop مثال فوق اعداد 0 تا 5 را چاپ کرده و با رسیدن شماره حلقه به 6، اجرای آن متوقف می شود.

حلقه for loop :

مکانیزم حلقه for loop با حلقه های قبلی کمی متفاوت است. از این حلقه بهتر است زمانی استفاده شود که می دانیم حدودا حلقه چند بار ممکن است تکرار شود. حلقه for loop دارای یک عدد به عنوان شمارنده است که با هر بار اجرای حلقه، مقدار آن به اندازه واحد تعیین شده کم یا زیاد می شود. اجرای حلقه تا زمانی که شرط آن درست باشد، ادامه داشته و شرط در ابتدای اجرای حلقه تست می شود. کد زیر یک مثال عملی از حلقه for loop را نشان می دهد :

using System;

namespace ConsoleApplication1

{

class Program

{

static void Main(string[] args)

{

int number = 5;

for(int i = 0; i < number; i++)

Console.WriteLine(i);

Console.ReadLine();

}

}

}

کد مثال فوق خروجی همانند حلقه While loop ایجاد می کند اما همانطور که شماهده می کنید، این حلقه کمی متراکم تر از حلقه های قبلی است. حلقه for از سه بخش اصلی تشکیل شده است :
ابتدا یک مقدار متغیر را برای شمارش اجرای حلقه تعریف و مقداردهی می کنیم، یک شرط برای اجرای حلقه بر مبنای متغیر شمارنده تعیین شده و یک گام افزایش یا کاهش جهت شمارش اجرای حلقه و کنترل گام آن مثل ++ یا – تعیین می گردد.
در کد مثال فوق، در مرحله اول شمارنده حلقه را به نام i تعریف و با مقدار 0 مقداردهی کرده ایم، این بخش حلقه فقط یک بار و در هنگام شروع حلقه اجرا می شود.
دو قسمت بعدی حلقه، در هر بار تکرار حلقه، اجرا می شوند. در هر بار، مقدار متغیر i با متغیرهای عددی number مقایسه شده و در صورتی که کوچکتر از آن باشد، دستورات حلقه یک بار دیگر اجرا شده ومقدار i یک واحد افزایش می یابد.

آموزش سی شارپ

نکته 1 :

اگر برای متغیر حلقه ، گام افزایش یا کاهش تعیین نکنید، در صورت درست بودن اولیه شرط حلقه، حلقه for به صورت نامحدود اجرا می شود.

نکته 2 :

گام افزایش یا کاهش شمارنده حلقه را به جای پرانتز جلوی for، در درون بدنه دستورات حلقه نیز می توان قرار داد.

حلقه foreach loop :

حلقه آخری که در این بخش بررسی خواهیم کرد، حلقه foreach loop است. از این حلقه معمولا در هنگام کار با مجموعه ای از آیتم ها مثل آرایه ها (Arrays) و یا متغیرهای لیستی استفاده می شود. در کد مثال حلقه foreach از یک متغیر لیستی به نام ArrayList استفاده می کنیم.
به کد مثال عملی حلقه foreach loop دقت کنید :

using System;

using System.Collections;

namespace ConsoleApplication1

{

class Program

{

static void Main(string[] args)

{

ArrayList list = new ArrayList();

list.Add("John Doe");

list.Add("Jane Doe");

list.Add("Someone Else");

foreach(string name in list)

Console.WriteLine(name);

Console.ReadLine();

}

}

}

در ابتدای مثال، ابتدا یک نمونه از متغیر لیستی ArrayList به نام list را ایجاد و سپس چندین مقدار متنی را به عنوان اعضای آن، به آرایه خود اضافه کرده ایم.
با استفاده از حلقه foreach loop به درون هر یک از آیتم های آرایه رفته و مقدار آن عضو را برابر با متغیر name قرار داده ایم. سپس مقدار متغیر name را در خروجی چاپ کرده ایم.
همانطور که در کد مثال مشاهده می کنید، ما به حلقه foreach اعلام کرده ایم که متغیر name از نوع متنی string می باشد. در هنگام کار با حلقه foreach حتما بایستی نوع داده ای که می خواهید حلقه درون آن حرکت کند را اعلام کنید.
در مواردی که نوع داده ای اعضای آرایه شما ممکن است با هم متفاوت باشد، بهتر است از یک متغیر شی کلاس object class برای حرکت درون اعضای آرایه استفاده کنید.

نکته :

در هنگام کار با متغیرهای آرایه ای، حتما از حلقه foreach استفاده کنید. زیرا ساختار بسیار ساده تری نسبت به سایر حلقه ها در زبان C# دارد.

آموزش سی شارپ

آموزش کار با توابع Function در زبان C#

یک تابع یا Function در C#، به شما امکان می دهد مجموعه ای از دستورات را درون یک ظرف مشخص قرار داده و در هر جای برنامه که لازم داشتید، با به کار بردن نام تابع آن ها را فراخوانی کنید.
در برنامه نویسی پروژه ها، شما گاهی مجبور می شوید تا یک قطعه کد را در چندین محل مختلف مورد استفاده قرار دهید، در این حالت است که تابع ها (Function) به کمک شما می آیند. از طرف دیگر، به وسیله توابع شما می توانید کدهای پروژه خود را به بخش های مجزا و قابل تفکیک از هم تبدیل کنید.
در زبان C#، یک تابع (Function) به صورت کلی زیر تعریف می شود :

< visibility > < return type > < name > ( < parameters > )

{

< function code >

}

برای فراخوانی یک تابع، کافی است نام آن را نوشته و سپس یک پرانتز باز و بسته در مقابل آن قرار دهید. اگر تابع شما دارای یک یا چند پارامتر باشد، لیست پارامترها را هم در همین پرانتز قرار می دهید. به صورت زیر :

FunctionName ( Parameter1 , Parameter2  ,… ) ;

در کد مثال زیر یک تابع به نام Dostuff را فراخوانی کرده ایم :

public void DoStuff()

{

Console.WriteLine("I'm doing something...");

}

در کد تابع فوق، اولین بخش فراخوانی تابع، یعنی کلمه public، تعیین کننده میدان دید تابع در سطح برنامه بوده و تعیین آن اختیاری است. میدان دید یک تابع مشخص می کند آیا سایر توابع و کلاس های موجود در برنامه امکان مشاهده و دسترسی تابع مورد نظر را خواهند داشت یا خیر. Public به معنای عمومی بوده و یعنی سایر کلاس ها و توابع دیگر برنامه می توانند به تابع فوق دسترسی داشته باشند.

نکته :

اگر میدان دید برای یک تابع تعیین نشود، به صورت پیش فرض Private یا خصوصی در نظر گرفته می شود. Private تابع های هم کلاس تابع مورد نظر امکان دسترسی مستقیم به تابع را دارند.

در درس های بعدی به طور کامل به بررسی میدان دید یا Scope توابع خواهیم پرداخت.
بخش بعدی قسمت فراخوانی تابع تعیین نوع داده ای مقدار خروجی تابع است. این مقدار می تواند هر نوع داده ای خاص در C# بوده و یا Void تعیین شود. به کار بردن کلمه Void به این معناست که این تابع هیچ مقدار خاصی را بر نمی گرداند.
از طرف دیگر همانطور که می بینید پرانتزهای مقابل نام تابع خالی هستند و به این معناست که این تابع هیچ پارامتری را دریافت نمی کند.
بیایید کمی تابع فوق را به صورت زیر تغییر دهیم :

public int AddNumbers(int number1, int number2)

{

int result = number1 + number2;

return result;

}

در کد جدید تقریبا همه بخش ها را تغییر دادیم. تابع اکنون یک مقدار عددی integer را به عنوان خروجی برمی گرداند، در پارامتر عددی integer دریافت کرده و به جای چاپ متن در خروجی، یک عملیات ریاضی انجام داده و خروجی آن را به عنوان متغیر result بر می گرداند.
این کار به این معناست که هر موقع نیاز داشتیم، در هر بخشی از کد برنامه می توانیم تابع فوق را فراخوانی کرده و با ارسال دو عدد مورد نظر به آن، حاصل جمع آن ها را به صورت خروجی دریافت کنیم، تا این که هر بار لازم باشد کد عملیات ریاضی را مجددا بنویسیم.
تابع AddNumber() را می توانیم به راحتی توسط کد زیر در هر جای برنامه فراخوانی کرد ه و در حجم و زمان کدنویسی خود صرفه جویی زیادی بکنیم.

int result = AddNumbers(10, 5);

Console.WriteLine(result);

همانطور که اشاره کردیم، این تابع یک مقدار عددی را باز می گرداند. هنگامی که در یک تابع، هر نوع داده ای غیر از Void را تعیین می کنیم، به این معناست که تابع را مجبور نموده ایم تا یک مقدار برگشتی داشته باشد.

نکته :

اگر خط کد return را از کد مثال فوق بردارید، خواهی دید که در هنگام اجرای برنامه، کامپایلر بر بروی این تابع ارور داده و پیام زیر را صادر می کند :

'AddNumbers(int, int)': not all code paths return a value

پیام فوق به ما یادآوری می کند که تابع فوق، علی رغم این که یک مقدار خروجی برای آن در نظر
گرفته شده، اما هیچ خروجی را بر نمی گرداند. اما می خواهیم خروجی تابع را کنترل کنید، می توانید کدی مثل کد زیر را به تابع اضافه کنید :

public int AddNumbers(int number1, int number2)

{

int result = number1 + number2;

if(result > 10)

{

return result;

}

}

اما باز هم پیام خطایی همانند مثال قبل صادر می شود، چرا؟ به این دلیل که هیچ ضمانتی وجود نداشته که شرط دستور if درست از آب در بیاید و برنامه خروجی داشته باشد (دستور return اجرا بشود). می توانید مشکل فوق را با تعیین یک مقدار پیش فرض برای عبارت return به صورت زیر حل کنید :

public int AddNumbers(int number1, int number2)

{

int result = number1 + number2;

if(result > 10)

{

return result;

}

return 0;

}

کد اضافه شده فوق، مشکل برنامه ما را حل کرده و از طرف دیگر نشان می دهد می توانیم بیش از یک دستور return را در بدنه تابع خود تعریف کنیم. به محض اجرای دستور return در هر جای کد برنامه، خروجی تابع ارسال شده و اجرای مابقی دستورات تابع لغو می شود. در مثال فوق، اگر مقدار متغیر خروجی return بزرگتر از 10 باشد، هیچ گاه دستور return 0; اجرا نمی شود.

پایان قسمت سوم آموزش برنامه نویسی سی شارپ

با ادامه آموزش سی شارپ همراه ما باشید

۱ نظر موافقین ۰ مخالفین ۰ ۰۳ آذر ۹۸ ، ۱۲:۱۲
افشین رفوا

آموزش سی شارپ-

آموزش #C

آموزش سی شارپ-آموزش #C
آموزش سی شارپ-آموزش #C

معرفی آموزش زبان C#

آموزش سی شارپ

به بخش جدید آموزش C# خوش آمدید. همزمان با معرفی چهارچوب کلری .NET ، مایکروسافت یک زبان برنامه نویسی جدید به نام C# که در اصطلاح سی شارپ خوانده می شود را به آن اضافه کرد.

سی شارپ طراحی شد تا نقش یک زبان برنامه نویسی ساده، مدرن، چند منظوره و شی گرا را برای چهارچوب کاری .NET ایفا کند. از طرف دیگر، C# مفهوم های کلیدی و قابلیت های خوب سایر زبان های برنامه نویسی به ویژه جاوا را قرض کرده و درون خود دارد.

از لحاظ نظری، C# می تواند تا سطح کد ماشین یا اسمبلی کامپایل شود، اما در کارکرد واقعی، همیشه به همراه چهارچوب کاری .NET استفاده می شود. بنابراین در برنامه ای که با زبان C# نوشته شده باشد، برای اجرا بر روی کامپیوتر، نیازمند نصب چهارچوب کاری .NET می باشد. با وجود این که چهارچوب کاری .NET امکان استفاده از طیف وسیعی از زبان های برنامه نویسی را بر روی ویندوز به ما می دهد، اما گاهی اوقات آموزش C# به عنوان زبان اصلی .NET معرفی شده است. البته شاید این به دلیل طراحی همزمان با چهارچوب کاری .NET باشد.

راهنمایی برای دوره آموزش C# :

سی شارپ یک زبان برنامه نویسی شی گرا یا Oriented بوده و در آن امکان استفاده از متغیرها یا تابع سراسری یا Globol وجود ندارد. در C همه چیز در کلاس ها (classes) قرار می گیرند، حتی ساده ترین انواع داده ای مثل int یا String که از کلاس System.object مشتق شده اند.

آموزش #C

معرفی ابزار و آموزش کار با Visual C# Express:

دستورات زبان C# را می توانید با هر نوع ادیتور متنی مثل Windows Notepad نوشته و سپس به وسیله برنامه CSC.exe که کامپایلر خطی دستورات C# بوده و همراه با چهارچوب کاری .NET بر روی سیستم نصب می شود، کامپایل و اجرا نمایید.

اما اکثر افراد ترجیح می دهند از یک IDE یا محیط توسعه یکپارچه (Integrated Development Envirment) استفاده کنند که مایکروسافت چندین برنامه را برای این منظور ارائه داده است. گل سرسبد این برنامه ها، Visual Studio است که قابلیت اجرای تمامی امکانات چهارچوب کاری .NET را دارا می باشد. این برنامه بسیار پیشرفته بوده و در نسخه های مختلفی ارائه شده است.

همزمان با ارائه نسخه 2 چهار چوب کاری .NET، مایکروسافت نسخه ای از ویژوال استودیو را به نام Express منتشر کرد که برای استفاده برنامه نویسان معمولی و کسانی که می خواهند چهارچوب کاری .NET را فرا بگیرند، مناسب است. نسخه Express فقط برای برنامه نویسی به زبان های C# و VB.NET طراحی شده و برخی از قابلیت های مهم و کاربردی ویژوال استودیو را شامل نمی شود. اما به هر حال ابزار رایگانی بوده و برای افراد تازه کار و معمولی بسیار مناسب است.

راهنمایی :

برای برنامه نویسی به زبان C بایستی برنامه ویژوال C# اکسپرس را از آدرس https://visualstudio.microsoft.com/vs/express/ دانلود نموده و بر روی سیستم خود نصب نمایید. سپس آماده کد نویسی C# خواهید بود.

آموزش ساخت اولین برنامه C# با Hello word

اگر شما قبلا نیز اقدام به یادگیری یک زبان برنامه نویسی کرده باشید، حتما می دانید که اینگونه آموزش ها معمولا با یک برنامه ساده به نام “Hello word” شروع می شوند.

در این آموزش c# هم قصد داریم از این سنت قدیمی استفاده کنیم. برای این منظور برنامه Visual C# Express را اجرا کرده و مسیر منوی File - > New Project را طی کرده و گزینه Consule application را انتخاب نمایید. این ساده ترین نوع برنامه بر روی سیستم ویندوز است، اما نگران نباشید، ما خیلی اینجا نخواهیم ماند. پس از این که بر روی دکمه ok کلیک نمایید، برنامه Visual C# Express یک پروژه جدید را برای شما ایجاد می کند که حاوی یک فایل به نام Program.cs است.

این کار سرآغاز جایی است که هیجان کار شروع شده و کد آن بایستی به صورت زیر باشد :

using System;

using System.Collections.Generic;

using System.Text;

namespace ConsoleApplication1

{

class Program

{

static void Main(string[] args)

{

}

}

}

درواقع، مجموعه کدهای فوق هیچ کار خاصی را انجام نمی دهند، یا حداقل اینگونه به نظر می رسند.سعی کنید با زدن دکمه F5 برنامه را بر روی سیستم خود اجرا نمایید. این کار باعث می شود تا Visual C# Express برنامه شامل را کامپایل کرده و اجرا نماید. اما همانگونه که مشاهده می کنید، این کدها کار خاصی را انجام نداده و فقط یک پنجره مشکی رنگ ویندوز باز شده و سپس بسته می شود. این مسئله به این دلیل است که برنامه شما دارای کد خاصی نبوده و کار خاصی را انجام نمی دهد. در بخش بعدی، به بررسی این خطوط کدها به طور کامل خواهیم پرداخت اما الان قصد داریم تا از برنامه خود یک خروجی بگیریم. برای این منظور دو خط کد زیر را درون آخرین مجموعه {} کد برنامه قرار دهید.

;Console.WriteLine("Hello, world!")

;()Console.ReadLine

سپس کد کامل برنامه بایستی به صورت زیر تغییر کند :

;using System

;using System.Collections.Generic

;using System.Text

namespace ConsoleApplication1

{

class Program

{

static void Main(string[] args)

{

;   Console.WriteLine("Hello, world!")

;()Console.ReadLine

}

}

}

یک بار دیگر، جهت اجرای برنامه دکمه F5 را فشار دهید، این بار مشاهده خواهید کرد که پنجره سیاه برنامه باز شده و علاوه بر این که بلافاصله بسته نمی شود، بلکه یک پیام سلام “Hello word” را نیز به کاربر نشان می دهد. خب، ما دو خط کد به برنامه اضافه کردیم. اما این کدها در واقع چه کاری انجام می دهند؟

خط اول از کلاس Consale برای نمایش یک خط متن در خروجی استفاده کرده و خط دوم هم می تواند یک مقدار ورودی یا متن را از کاربر بخواند. اما چرا خواندن یا Read؟

درواقع این کار یک حقه کوچک است زیرا بدون آن برنامه بلافاصله اجرا شده و تمام می شود و بدون این که کاربر فرصت کند خروجی آن را بروی صفحه ببیند، پنجره اش بسته می شود.

دستور ReadLine Command به برنامه می گوید تا برای دریافت یک ورودی از کاربر صبر کند و همان طور که مشاهده می منید، شما می توانید یک متن را درون پنجره تایپ نمایید. پس از تایپ متن دلخواه، دکمه Enter را زده و پنجره برنامه را ببندید.

به شما تبریک می گوییم، اولین برنامه C# خود را ساخته و اجرا کردید. در بخش بعدی به تشریح کدهای نوشته شده و عملیات صورت گرفته خواهیم پرداخت.

آموزش C#

توضیح و آموزش ساخت برنامه Hello World در C#

در بخش قبل، در اولین برنامه C# ای که طراحی کردیم، یک نوشته را در خروجی چاپ نمودیم. برای درک بستر خروجی مثال، در درس قبلی به تشریح کدهای نوشته شده پرداخته نشد، اما در این درس به بررسی کد مثال می پردازیم.

همانطور که از مشاهده کدهای مثال درس متوجه شده اید، برخی از خط های کد مثال بسیار شبیه هم بودند، بنابراین در توضیح، آن ها را در کنار همدیگر قرار داده ایم.

بیایید با کوتاه ترین و پرکاربرد ترین کاراکترها در کد مثال خود شروع کنیم : کاراکترهای { و }. به این کاراکترها در اصطلاح براکت (curly braces) می گویند و در C ابتدا و انتهای هر بلوک کد را مشخص می کنند. براکت ها در بسیاری از زبان برنامه نویسی دیگر از جمله C++، جاوا، جاوا اسکریپت و ... نیز استفاده می شوند. همانطور که در مثال مشاهده کردید، براکت ها برای بسته بندی چندین خط کد که مرتبط به هم هستند، استفاده می شوند. در مثال های بعدی، با نحوه استفاده از براکت ها بیشتر آشنا خواهید شد.

اکنون بیایید از ابتدای کد شروع کنیم. قسمت Using ها :

;using System

;using System.Collections.Generic

;using System.Text

واژه Using یک واژه کلیدی (keyword) است که توسط ادیتورکدها به رنگ آبی نشان داده می شود. واژه کلیدی Using یک namespace را به کد برنامه وارد می کند. Namespace مجموعه ای از کلاس ها هستند که با هم کار خاصی را انجام می دهند. در مثال Hello Word، سه namespace به برنامه اضافه شده اند که هر کدام کار خاصی را در کد برای ما انجام می دهند. برای مثال، ما از کلاس Consale Class که بخشی از System Namespace است برای چاپ مقدار متنی در خروجی استفاده می کنیم.

از طرف دیگر، همانند قطعه کد زیر، شما می توانید یک namespace دلخواه را ایجاد کرده و سپس آن را در کدهای خود استفاده کنید.

namespace ConsoleApplication1

اکنون namespace ConsaleAppliction1، به عنوان namespace اصلی (main) این برنامه بوده و شامل چندین کلاس خواهد بود. می توانید چندین namespace دیگر نیز که نیاز دارید را ایجاد کرده و در هر کدام کلاس های مورد نظر خود را قرار دهید. سپس همانند سایر namespace ها با استفاده از واژه کلیدی Using آن را به برنامه خود اضافه کنید.

در مرحله بعد، ما کلاس Class مورد نظر خود را ایجاد می کنیم. از آن جا که C# یک زبان شی گرا Object-oriented است، مجموعه کدهای خاص را درون یک کلاس تعریف می کنیم. برای مثال، به وسیله کد زیر یک کلاس به نام Program را تعریف کرده ایم :

class Program

در هر برنامه به تعداد نیاز می توانید کلاس های مختلف تعریف کنید. اما در این مثال، ما فقط یک کلاس خواهیم داشت. هر کلاس می تواند شامل تعدادی متغیر (variable)، خواص (properties) و متدها (methods) باشد، مفهوم هایی که در درس های بعد به تشریح کامل آن ها خواهیم پرداخت. تنها چیزی که الان بایستی بدانید این است که کلاس Program فقط شامل یک متد (method) بوده که به صورت زیر تعریف شده است :

static void Main(string[] args)

خط کد فوق، به احتمال زیاد پیپچیده ترین بخش مثال است. به همین دلیل بیایید ان را به بخش های کوچکی تقسیم کرده و به بررسی هریک بپردازیم.

کلمه اول static است. کلیدواژه یا (keyword) به نام static اعلام می کند که این کلاس بایستی بدون نیاز به نمونه سازی از آن قابل دسترس باشد، راجع به این مسئله در بخش Classes به طور کامل توضیخ می دهیم.

واژه کلیدی بعدی Void است که مشخص می کند آیا متد ما بایستی پس از اجرای کامل، مقداری را برگرداند یا خیر. مقدار برگشتی یک تابع می تواند برای مثال از نوع عددی int، متنی string و یا هیچ چیز (void) باشد. به کار بردن کلمه void در این مثال، به این معنی است که تابع ما هیچ مقداری را پس از اجرا باز نمی گرداند.

واژه کلیدی بعدی Main بوده که نام متد را تعیین می کند. متد Main تابع اصلی هر برنامه C# بوده و اولین قطعه کدی است که در برنامه اجرا می شود.

پس از نام متد، می توانید یک یا چند آرگومان را به عنوان مقادیر ورودی هر متد درون پرانتز تعیین کنید. در مثال ما، متد Main فقط دارای یک آرگومان ورودی به نام args می باشد. آرگومان یک متغیر یا مقدار ثابت است که در هنگام فراخوانی هر تابعی، می تواند به آن ارسال شود. آرگومان args در مثال فوق از نوع متنی و آرایه ای است.

در پایان این درس بایستی درک کلی از برنامه های C# و نحوه کار آن ها پیدا کرده باشید.

با ادامه دوره آموزش سی شارپ همراه باشید.

۱ نظر موافقین ۰ مخالفین ۰ ۱۶ مهر ۹۸ ، ۱۷:۰۲
افشین رفوا