همه ی دوروبریات از اینجا شروع کردن…. تو هم شروع کن !

نقطه شروع چیه ؟

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

بدون شک تو هم دنبال آموزش بودی رسیدی اینجا پس :

۱-به پلتفرم بوی اعتماد کن که در این صفحه تو به خواسته ات میرسی !

۲-سخت تمرین کن و نگران زیاد بودن محتوای آموزشی نباش !

چارت نکات قبل از شروع به یادگیری

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

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

فورا این صفحه را تا انتها اسکرول نکنید که ببینید چه خبر است ! اگر به دنبال یادگیری هستید به ما اعتماد کنید و قدم به قدم مفاهیم را دنبال کنید و در آخر مطمئن باشید که این مبحث را یاد خواهید گرفت .

 

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

 

شروع سی شار

سی شارپ یک زبان برنامه نویسی ساده ، مدرن  و شی گرا است که توسط شرکت مایکروسافت به سرپرستی Anders Hejlsberg توسعه یافته است . این نقطه شروع به شما آموزش برنامه نویسی پایه زبان سی شارپ را می آموزد و همچنین مفاهیم پیشرفته مختلف مربوط به زبان برنامه نویسی #C را به شما معرفی می کند . مخاطب این آموزش برای مبتدیان تهیه شده است تا به آنها کمک کند زبان برنامه نویسی #C را اساسی تر و بهتر درک کنند.

افزودن این صفحه به علاقه مندی ها

برای افزودن صفحه به علاقه مندی ها در همه ی مرورگرهای اینترنت (به عنوان مثال Chrome ، Edge ، Firefox ، Opera) با فشار دادن Ctrl D یک نشانک یا آدرس دلخواه مورد علاقه جدید را برای صفحه فعلی ایجاد می کنید. به عنوان مثال ، اکنون می توانید Ctrl D را فشار دهید تا این صفحه را به علاقه مندی های خود اضافه کنید.

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

بسیار مبتنی بر زبان های برنامه نویسی C و ++C است ، بنابراین اگر درک اساسی از برنامه نویسی C یا ++C داشته باشید ، یادگیری سی شارپ بسیار راحتتر خواهد بود .

یادگیری سی شارپ را شروع کنید !

برای یادگیری زبان سی شارپ همیشه بهترین IDE برنامه ویژوال استودیو هست ولی در کنار این محیط می توانید از برنامه های دیگری مثل vscode هم استفاده کنید .vscode محیط سبک و راحتی دارد و توسط شرکت مایکروسافت تولید شده است .

خب ما از ویژوال استودیو استفاده می کنیم که شما می توانید با کلیک بر روی این لینک آن را دانلود کنید .

نصب ویژوال استودیو برای شروع سی شارپ

پس از بارگیری و نصب Visual Studio Installer بخش .NET را انتخاب کرده و بر روی دکمه Modify / Install کلیک کنید:

پس از اتمام نصب ، برای شروع کار با Visual Studio بر روی دکمه Launch کلیک کنید.

در پنجره شروع ، ایجاد یک پروژه جدید را انتخاب کنید:

سپس بر روی دکمه “نصب ابزارها و ویژگی های بیشتر” کلیک کنید:

“Console App (.NET Core)” را از لیست انتخاب کنید و روی دکمه Next کلیک کنید:

نام پروژه خود را وارد کنید و روی دکمه ایجاد کلیک کنید:

آیا کارهای بالا را انجام دادید ؟

برنامه را نصب کردید ؟

پروژه جدید را ایجاد کردید ؟

همه چی درست بود ؟

درباره زبان برنامه نویسی سی شارپ چه می دانید ؟

این یک زبان برنامه نویسی شی گرا است که توسط مایکروسافت ایجاد شده و بر روی .NET Framework اجرا می شود.

زبان شی گرا سی شارپ ریشه در خانواه زبان C دارد و این زبان به زبانهای معروف دیگر مانند C ++ و Java نزدیک است.

اولین نسخه در سال ۲۰۰۲ منتشر شد. آخرین نسخه ، C # 8 ، در سپتامبر ۲۰۱۹ منتشر شد.

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

  • برنامه های موبایل
  • برنامه های دسک تاپ
  • برنامه های وب
  • خدمات وب
  • وب سایت ها
  • بازی ها
  • برنامه های VR
  • برنامه های پایگاه داده
  • و خیلی چیزهای بیشتر!

چرا باید از #C استفاده کرد؟

  1. سی شارپ یکی از محبوب ترین زبان های برنامه نویسی در جهان است !
  2. یادگیری آن آسان و کاربردهای بسیار زیادی دارد
  3. به شدت از این زبان برنامه نویسی پشتیبانی می شود
  4. سی شارپ یک زبان شی گرا است که ساختار روشنی به برنامه ها می دهد و اجازه می دهد تا از کد استفاده مجدد شود ، و هزینه های توسعه را کاهش می دهد.
  5. از آنجا که سی شارپ به C ، C ++ و Java نزدیک است ، تغییر کدهای زبان سی شارپ یا بالعکس را برای برنامه نویسان آسان می کند.

** خب صحبت دیگه کافیه … بیایید شروع کنیم 

تست کنید سلام دنیا !

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

ایجاد برنامه Hello World در سی شارپ

برای تست و نمایش یک پیام در سی شارپ باید از کد Console.WriteLine استفاده کنیم :

Console.WriteLine("Hello World!");

using System;
namespace HelloWorld {
  class Program {
    static void Main(string[] args) {
      Console.WriteLine("Hello World!");
    }
  }
}

بنابراین در قدم اول وارد محیط برنامه نویسی شوید و قطعه کد زیر را تست کنید . می بایست یک پیام “Hello World” بر روی کنسول یا محیط فرمتان ظاهر شود .

using System;
namespace HelloWorld {
  class Program {
    static void Main(string[] args) {
      Console.WriteLine("Hello World!");
    }
  }
}

 

چه شد ؟ جواب گرفتید ؟ اگر به هر دلیلی قطعه کد بالا درست درنیامد از قطعه کد زیر استفاده کنید . خط کد آخر جهت جلوگیری از بسته شدن محیط فرمان است . (در واقع قبل از بسته شدن از کاربر می خواهید یک کلید را وارد کند)

using System;
namespace HelloWorldApplication {
  class HelloWorld {
    static void Main(string[] args) {
      /* my first program in C# */
      Console.WriteLine("Hello World");
      Console.ReadKey();
    }
  }
}

 

اگر در محیط ویژوال استودیو شروع کرده باشید باید خروجی اولین برنامه شما به شکل زیر باشد :

اگر از سی شارپ در محیط ویندوز در حال استفاده هستید می توانید برای نمایش پیام از قطعه کد زیر استفاده کنید :

string message = "Simple MessageBox";
string title = "Title";
MessageBox.Show(message, title);

نمایش پیام با WritLine در سی شارپ

متداول ترین روش برای خروج یک پیام یا نوشته ی دلخواه در سی شارپ استفاده از  WritLine است اما می توانید از Writ خالی نیز استفاده کنید.

تفاوت در این است که WriteLine هر بار خروجی را روی یک خط جدید چاپ می کند ، در حالی که Write در همان خط پیام را چاپ می کند .به مثال زیر توجه کنید :

Console.WriteLine("Hello World!");
Console.WriteLine("I will print on a new line.");
Console.Write("Hello World! ");
Console.Write("I will print on the same line.");

 

*پیشنهاد می شود قطعه کد ها را همان لحظه ای که می بینید در ویژوال استودیو تست کنید .

کامنت گذاری در #C

از کامنت گذاری ها می توان برای توضیح کدهای نوشته شده ی سی شارپ و خوانایی بیشتر آنها استفاده کرد.

کامنت ها می توانند روی یک خط یا روی چند خط یا حتی بیشتر باشند . در سی شارپ نظرات تک خطی با (//) شروع می شوند.

هر خط کدی که در ابتدای آن // آورده شود اجرا نمی شود .

کامنت های تک خطی

به عنوان مثال :

// This is a commentConsole.WriteLine("Hello World!");

پس متوجه شدید ؟ کامنت ها برای یادداشت گذاری های خودتان است که با آن کد ها را توضیح می دهید .

نظرات چند خطی 

نظرات چند خطی با / * شروع و با * / پایان می یابد.

هر خط کدی که بین / * و * / توسط زبان سی شارپ نادیده گرفته خواهد شد.

این مثال کامنت های چند خطی را توضیح می دهید :

/* The code below will print the words Hello Worldto the screen, and it is amazing */
Console.WriteLine("Hello World!");

همچنین اگر کامنت ها را در یک برنامه با فرمت کامل بخواهید استفاده کنید به شکل زیر می باشد :

using System;
namespace Tutlane {
  class Program {
    static void Main(string[] args) {
      /*Define & assign a variable andSend a variable to the method to display*/
      string msg = "Welcome to Tutlane";
      GreetMessage(msg);
      Console.WriteLine("Press Enter Key to Exit..");
      Console.ReadLine();
    } 
    // This Method will display the welcome messagepublic static void GreetMessage(string message)
    {Console.WriteLine(message);
    }
  }
}

کامنت های XML در زبان سی شارپ

کامنت گذاری های XML نوع خاصی از کامنت گذاری هستند که توسط کاربر برای کلاس ها ، متتغیر یا هر نوع تابع ای استفاده می شود .این نوع کامنت گذاری می تواند توسط کامپایلر پردازش شده تا در زمان ساخت خروجی نهایی یک پرونده مستندات XML تولید کند. فایل XML تولید شده توسط کامپایلر می تواند در کنار مجموعه .NET شما توزیع شود تا Visual Studio و سایر IDE ها از IntelliSense برای نمایش اطلاعات و توضیحات کد ها بهره ببرند . برای کسب اطلاعات بیشتر می توانید از این لینک استفاده کنید .

فرمت این نوع کامنت گذاری ها به شکل زیر است :

/// <summary> /// 
This class performs an important function.
/// </summary>
public class MyClass {}

اگر در چند خط کد برنامه کامل بخواهید از این نوع کامنت گذاری استفاده کنید به شکل زیر است :

using System;
namespace Tutlane {
  class Program {
    static void Main(string[] args) {
        string msg = "Welcome to platformboy";
        GreetMessage(msg);
        Console.WriteLine("Press Enter Key to Exit..");
        Console.ReadLine();
      }
      ///<summary>/// ethod to Display Welcome Message
      <
      param name = "message" > < /param>
    ///</summary>///
    public static void GreetMessage(string message) {
      Console.WriteLine(message);
    }
  }
}

استفاده از Namespace در سی شارپ

از Namespace ها برای سازماندهی چندین کلاس در برنامه ها شده و باعث کاهش فضای کدها در برنامه های NET. می شود. با استفاده از کلمه کلیدی namespace می توانیم فضایی از کد ها را به نام به خصوصی اختصاص دهیم . در زیر نحو تعریف فضای نام در زبان برنامه نویسی سی شارپ آمده است.

namespace Namespace_Nam
{
// Body of Namespace}

در مثال زیر یک فضای نام تعریف کرده ایم . به نام Namespace و نام کلاس توجه کنید :

namespace platformboy {
  class Welcome {
    public void GreetMessage() { // your method code}}}

همچنین ها به شکل کمک می کنند در یک فایل از دو فضای نام برای دو کلاس متفاوت استفاده کنید .

using System;
using CustomNameSpace.Nested;
namespace platformboy {
  class Program {
    static void Main(string[] args) {
      Welcome w = new Welcome();
      w.GreetMessage();
      Console.WriteLine("Press Any Key to Exit..");
      Console.ReadLine();
    }
  }
}
namespace CustomNameSpace {
  namespace Nested {
    class Welcome {
      public void GreetMessage() {
        Console.WriteLine("Welcome to Tutlane");
      }
    }
  }

دسترسی به Namespace ها با using

بیشتر برنامه های نوشته شده با سی شارپ به فایل ها ، کتابخانه ها و موارد متعددی برای اجرای کدهای خود نیازمند است . در سی شارپ در ابتدایی ترین خط کدها نام هایی که کد ها نیاز به اجرای آنها دارند نوشته می شود . این بخش فضاهای نامی را که برنامه مرتباً از آنها استفاده می کند لیست می کند و برنامه نویس را از تعیین نام کاملاً راحت می سازد . به طور مثال ما در قطعه کدی نیاز داریم تا فایلی را در سیستم ذخیره کنیم . برای انجام این کار بعد از نوشتن کد صحیح آن باید فضای نام آن قطعه کد را در بالاترین قسمت کدها تعریف کنیم . به مثال زیر دقت کنید :

using System.IO;

به مثال زیر توجه کنید . برای اجرای صحیح کدهای نوشته شده از فضای نام ها استفاده شده است .

using System;
using System.IO;
class Program {
  static void Main(string[] args) {
    textstring[] lines = {
      "First line",
      "Second line",
      "Third line"
    };
    //Set a variable to the Documents path.
    string docPath = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
    // Write the string array to a new file named "WriteLines.txt".using (StreamWriter outputFile = new 
    StreamWriter(Path.Combine(docPath, "WriteLines.txt"))) {
      foreach(string line in lines) outputFile.WriteLine(line);
    }
  }
}

 

متغیرها در زبان سی شارپ

متغیرها اسامی برای ذخیره مقادیر داده ها هستند که توسط کاربر در هر کجای برنامه تعریف می شوند .

در زبان سی شارپ متغیرها انواع مختلفی دارند. (با کلمات کلیدی مختلف تعریف می شوند)  به عنوان مثال متداول ترین متغیرها در سی شارپ :

  1. int – اعداد صحیح (کل اعداد) را بدون اعشار مانند ۱۲۳ را ذخیره می کند.
  2. double – اعداد شناور را با اعشار مانند ۱۹٫۹۹ را ذخیره می کند.
  3. char – کاراکترهای منفرد ، مانند ‘a’ یا ‘B’ را ذخیره می کند. مقادیر کاراکتر با نقل قول های تک محصور شده اند.
  4. string – متنی مانند “سلام به جهان” را ذخیره می کند. مقادیر رشته با نقل قول های مضاعف احاطه شده اند.
  5. bool – مقادیر را با دو حالت درست یا نادرست ذخیره می کند.

به طور  کلی :

متغیر چیزی نیست جز اسمی که برای ذخیره سازی داده ها استفاده می شود و برنامه های ما می توانند از آن استفاده کنند. هر متغیر در سی شارپ نوع خاصی دارد که با برخی از آنها اشنا شدید .

برای ایجاد یک متغیر ، باید نوع آن را مشخص کنید و یک مقدار به آن اختصاص دهید . به مثال های زیر توجه کنید .

int i,j,k;
char c, ch;
float f, salary;
double d ;

متغیر ها را تست کنید 

یک متغیر از نوع string تعریف کنید و مقدار “John” را به آن اختصاص داده و آن را چاپ کنید :

string name = "John";
Console.WriteLine(name);

به مثال های دیگر زیر توجه کنید :

int d = 3,
f = 5;
/* initializing d and f. */
byte z = 22;
/* initializes z. */
double pi = 3.14159;
/* declares an approximation of pi. */
char x = 'x';
/* the variable x has the value 'x'. */

یک مثال برای متغیر با اعداد اعشاری

float f1 = 35e3F;
double d1 = 12E4D;
Console.WriteLine(f1);
Console.WriteLine(d1);

 

جمع و تفریق با متغیر ها در سی شارپ

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

using System;
namespace VariableDefinition {
  class Program {
    static void Main(string[] args) {
      short a;
      int b;
      double c;
      /* actual initialization */
      a = 10;
      b = 20;
      c = a + b;
      Console.WriteLine("a = {0}, b = {1}, c = {2}", a, b, c);
      Console.ReadLine();
    }
  }
}

 

خروجی قطعه کد بالا به شکل زیر است :

a = 10, b = 20, c = 30

جمع دو رشته در سی شارپ

همچنین می توانید از کاراکتر + برای افزودن یک متغیر به متغیر دیگری استفاده کنید.

به مثال زیر توجه کنید :

string firstName = "John ";
string lastName = "Doe";
string fullName = firstName + lastName;
Console.WriteLine(fullName);

متغیر Bool در سی شارپ

یک نوع داده ای از نوع بولی با کلمه کلیدی bool اعلام می شود و فقط می تواند مقادیر درست یا غلط را بدست آورد:

یعنی در این متغیر همیشه یا مقدار True و یا مقدار False قرار می گیرد که برای بررسی حالات های مختلف در برنامه به کار می روند .

bool isCSharpFun = true;
bool isFishTasty = false;
Console.WriteLine(isCSharpFun); // Outputs TrueConsole.WriteLine(isFishTasty);// Outputs False

 

شناسه های متغیر ها در سی شارپ

تمام متغیرهای سی شارپ باید با نام های منحصر به فرد شناخته شوند.

به این نامهای منحصر به فرد شناسه گفته می شود.

شناسه ها می توانند نام کوتاه (مانند x و y) یا نام توصیفی بیشتر (سن ، جمع ، حجم کل) باشند.

توجه: برای ایجاد کدهای قابل فهم توصیه می شود از نامهای توصیفی یا نام های مشخص استفاده کنید . به طور مثال اگر در حالت تعریف یک متغیر برای ذخیره ی نام و نام خانوادگی کاربر هستید بهتر است نام متغیر هم چیزی شبیه آن باشد تا بعدا کد هایتان قابل فهم باشد.

// Goodint minutesPerHour = 60;
m = 60;

تغییر متغیر ها به یکدیگر 

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

در C # دو نوع ریخته گری وجود دارد

۱- ریخته گری ضمنی (به صورت خودکار) – تبدیل یک نوع کوچکتر به یک نوع بزرگتر
char -> int -> long -> float -> double

۲-ریخته گری صریح (دستی) – تبدیل یک نوع بزرگتر به یک نوع کوچکتر
double -> float -> long -> int -> char

** سخت نگیرید ! یعنی اینکه فرضا نوع عدد اعشاری را در یک متغیر از نوع عدد صحیح بریزید !

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

مثال زیر همه چیز را روشن می کند :

int myInt = 9;
double myDouble = myInt; // Automatic casting: int to double
Console.WriteLine(myInt);// Outputs 9
Console.WriteLine(myDouble);// Outputs 9

ریختن صریح باید با قرار دادن نوع داخل پرانتز در مقابل مقدار به صورت دستی انجام شود:

به کامنت ها توجه کنید :

double myDouble = 9.78;
int myInt = (int) myDouble; // Manual casting: double to int
Console.WriteLine(myDouble);// Outputs 9.78
Console.WriteLine(myInt);// Outputs 9

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

using System;
namespace TypeConversionApplication {
  class StringConversion {
    static void Main(string[] args) {
      int i = 75;
      float f = 53.005 f;
      double d = 2345.7652;
      bool b = true;
      Console.WriteLine(i.ToString());
      Console.WriteLine(f.ToString());
      Console.WriteLine(d.ToString());
      Console.WriteLine(b.ToString());
      Console.ReadKey();
    }
  }
}

پس از اجرای قطعه کد بالا خروجی می بایست به شکل زیر باشد :

۷۵
۵۳٫۰۰۵
۲۳۴۵٫۷۶۵۲
True

تا همینجا فعلا کافیه ...

خسته شدید ؟ برای یادگیری هیچ عجله ای نداشته باشید

حدود یک الی دو دقیقه استراحت کنید و سپس ادامه دهید …

دریافت ورودی از کاربر

قبلاً یاد گرفته اید که از Console.WriteLine  برای خروجی (چاپ) مقادیر استفاده می شود. اکنون از Console.ReadLine برای دریافت ورودی کاربر استفاده خواهیم کرد.

در مثال زیر ، کاربر می تواند نام کاربری خود را که در متغیر userName ذخیره شده است وارد کند. سپس مقدار userName را چاپ می کنیم:

// Type your username and press enter
Console.WriteLine("Enter username:");// Create a string variable and get user input from the keyboard and store it in the variablestring 
userName = Console.ReadLine();// Print the value of the variable (userName), which will display the input value
Console.WriteLine("Username is: " + userName)

ورودی کاربر و اعداد

متد () Console.ReadLine یک رشته را برمی گرداند. بنابراین ، شما نمی توانید از نوع داده دیگری مانند int اطلاعات دریافت کنید. برنامه زیر خطایی ایجاد می کند:

Console.WriteLine("Enter your age:");
int age = Console.ReadLine();
Console.WriteLine("Your age is: " + age);

قطعه کد بالا خطای زیر را بر می گرداند :

Cannot implicitly convert type ‘string’ to ‘int’

حال قطعه کد زیر را تست کنید :

Console.WriteLine("Enter your age:");
int age = Convert.ToInt32(Console.ReadLine());
Console.WriteLine("Your age is: " + age);

اپراتورها یا عملگردها در سی شارپ

از اپراتورها برای انجام عملیات بر روی متغیرها و مقادیر استفاده می شود.

در مثال زیر ، از عملگر + برای جمع کردن دو مقدار استفاده می کنیم:

int x = 100 + 50;

مثال های بیشتر :

int sum1 = 100 + 50; // 150 (100 + 50)
int sum2 = sum1 + 250;
// ۴۰۰ (۱۵۰ + ۲۵۰)
int sum3 = sum2 + sum2;
// ۸۰۰ (۴۰۰ + ۴۰۰)

عملگر نمادی است که به کامپایلر می گوید دستکاری های ریاضی یا منطقی خاصی را انجام دهد. سی شارپ دارای مجموعه ای غنی از اپراتورهای داخلی است :

  • اپراتورهای حساب
  • اپراتورهای رابطه ای
  • اپراتورهای منطقی
  • اپراتورهای Bitwise
  • اپراتورهای واگذاری
  • اپراتورهای متفرقه

عملگرهای ریاضی

+ : دو عملوند A + B = 30 را جمع می کند
– : عملوند دوم را از اول کم می کند – B = -10
* : هر دو عملوند را ضرب می کند A * B = 200
/ : عدد را ا عدد کناری تقسیم می کند B / A = 2
Mod : عملگر مدول و باقیمانده پس از تقسیم عدد صحیح B٪ A = 0
++ : عملگر مقدار عدد صحیح را با یک افزایش می دهد
— : عملگر مقدار عدد صحیح را با یک کاهش می دهد

int x = 10;x += 5;

سایر اپراتور ها :

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

== برای بررسی دو شرط مساوی با

!= بررسی مساوی نبودن شرط

> بزرگتر

< کوچیکتر

>= بزرگتر مساوی

<= کوچیکتر مساوی

کلاس Math در سی شارپ

روش های زیادی دارد که به شما امکان می دهد کارهای ریاضی را روی اعداد انجام دهید.

برای یافتن بالاترین مقدار x و y می توان از روش Math.Max (x، y) استفاده کرد:

Math.Max(5, 10)

یعنی اگر دو عدد داشته باشید با مثال های زیر می توانید بین دو عدد کارهای زیر را انجام دهید :

Math.Max(x,y)
Math.Max(5, 10);
Math.Min(x,y)Math.Min(5, 10);
Math.Sqrt(x)Math.Sqrt(64);
Math.Abs(x)Math.Abs(-4.7);
Math.Round()Math.Round(9.99);

کار با رشته ها در سی شارپ

کمی قبل از این بخش با رشته ها آشنا شدیم . رشته ها برای ذخیره متن استفاده می شوند.
یک متغیر رشته ای شامل مجموعه ای از کاراکترهای احاطه شده توسط نقل قول های دوگانه است:

string greeting = “Hello”

طول رشته

یک رشته در سی شارپ در واقع یک شی است ، که دارای ویژگی ها و روش هایی است که می تواند عملیات خاصی را روی رشته ها انجام دهد. به عنوان مثال ، طول یک رشته را می توان با ویژگی Length یافت:

string txt = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
Console.WriteLine("The length of the txt string is: " + txt.Length);

روشهای رشته ای بسیاری وجود دارد ، به عنوان مثال ToUpper  و ToLower ، که یک کپی از رشته تبدیل شده به بزرگ یا کوچک را برمی گرداند:

string txt = "Hello World";
Console.WriteLine(txt.ToUpper()); // Outputs "HELLO WORLD"
Console.WriteLine(txt.ToLower());// Outputs "hello world"

اتصال رشته ها

برای ترکیب آنها می توان از عملگر + در بین رشته ها استفاده کرد. این به هم پیوستگی گفته می شود:

string firstName = "John ";
string lastName = "Doe";
string name = firstName + lastName;
Console.WriteLine(name);

* توجه داشته باشید که ما برای ایجاد فاصله بین firstName و lastName روی چاپ ، فضایی بعد از “John” اضافه کرده ایم.

همچنین می توانید از روش string.Concat برای اتصال دو رشته استفاده کنید:

string firstName = "John ";
string lastName = "Doe";
string name = string.Concat(firstName, lastName);
Console.WriteLine(name);

درون یابی رشته ای

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

string firstName = "John";
string lastName = "Doe";
string name = $ "My full name is: {firstName} {lastName}";
Console.WriteLine(name);

دستورات شرطی if در سی شارپ

دستور if بر اساس عبارت Boolean عمل می کند و در نهایت مشخص می کند که کدام دستور را اجرا کنیم.قبلا با bool برای شرط true و false آشنا شدید . در مثال زیر ، شرط متغیر bool روی true تنظیم شده و سپس در دستور if بررسی می شود.

به طور کلی شرط داخل پرانتز بررسی می شود اگر درست بود این کار را انجام بدهد(کار بعد از پرانتز ) ولی اگر نبود از پرانتز رد شود.

bool condition = true;
if (condition) {
  Console.WriteLine("The variable is set to true.");
} else {
  Console.WriteLine("The variable is set to false.");

زبان برنامه نویسی سی شارپ از شرایط منطقی معمول ریاضیات پشتیبانی می کند

  • کمتر از: a <b
  • کمتر یا مساوی با: a <= b
  • بزرگتر از: a> b
  • بزرگتر یا مساوی با: a> = b
  • برابر با a == b
  • برابر نیست: a! = b

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

اگر (شرط)
{
// قطعه کد که اگر شرط درست باشد اجرا می شود
}

به مثال زیر توجه کنید :

if (20 > 18) {
  Console.WriteLine("20 is greater than 18");
}

همچنین :

// if-else statementif (condition){then-statement;}else{else-statement;}// Next statement in the program.// if statement without an elseif (condition){then-statement;}// Next statement in the program.

یک مثال دیگر برای بررسی شرط مقادیر متغیر ها

int x = 20;int y = 18;if (x > y){Console.WriteLine("x is greater than y");}

از دستور else برای تعیین بلوک کد استفاده کنید تا در صورت نادرست بودن شرایط اجرا شود.

int time = 20;if (time < 18){Console.WriteLine("Good day.");}else{Console.WriteLine("Good evening.");}// Outputs "Good evening."

استفاده از سوئیچ در سی شارپ

با استفاده از عبارت switch می توانید یک مقدار داده و در تمام شرط ها آن مقدار را بررسی کنید :

int day = 4;switch (day){case 1:Console.WriteLine("Monday");break;case 2:Console.WriteLine("Tuesday");break;case 3:Console.WriteLine("Wednesday");break;case 4:Console.WriteLine("Thursday");break;case 5:Console.WriteLine("Friday");break;case 6:Console.WriteLine("Saturday");break;case 7:Console.WriteLine("Sunday");break;}// Outputs "Thursday" (day 4)

حلقه ها در سی شارپ

حلقه ها می توانند یک بلوک کد را اجرا کنند تا زمانی که یک شرط مشخص شده حاصل شود.

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

در مثال زیر ، کد موجود در حلقه بارها و بارها اجرا می شود ، به شرطی که یک متغیر (i) کمتر از ۵ باشد:

int i = 0;while (i < 5){Console.WriteLine(i);i++;}

مثال زیر از حلقه do / while استفاده می کند. این حلقه همیشه حداقل یک بار اجرا می شود ، حتی اگر شرط نادرست باشد ، زیرا بلوک کد قبل از آزمایش شرط اجرا می شود:

int i = 0;do{Console.WriteLine(i);i++;}while (i < 5);

وقتی دقیقاً می دانید چند بار می خواهید از طریق یک کد حلقه اجرا کنید ، به جای حلقه while از حلقه for استفاده کنید:

این مثال فقط مقادیر بین ۰ تا ۱۰ را چاپ می کند:

for (int i = 0; i <= 10; i = i + 2){Console.WriteLine(i);}

مثال زیر با استفاده از حلقه foreach تمام عناصر موجود در آرایه اتومبیل را خروجی می دهد:

string[] cars = {"Volvo", "BMW", "Ford", "Mazda"};foreach (string i in cars){Console.WriteLine(i);}

استفاده از break

قبلاً دستور break را مشاهده کرده اید که در بالا این آموزش استفاده شده است. این مورد برای “پرش از دستور” سوئیچ استفاده شد.

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

این مثال وقتی i برابر با ۴ باشد از حلقه خارج می شود

for (int i = 0; i < 10; i++){if (i == 4){break;}Console.WriteLine(i);}

در صورت بروز یک شرط مشخص اگر آن شرط عملیاتی ندارد به حلقه می گوییم که به کارش ادامه دهد :

این مثال مقدار ۴ را رد می کند:

for (int i = 0; i < 10; i++){if (i == 4){continue;}Console.WriteLine(i);}

همچنین می توانید از break و حلقه های while به این شکل استفاده کنید:

int i = 0;while (i < 10){Console.WriteLine(i);i++;if (i == 4){break;}}
int i = 0;while (i < 10){if (i == 4){i++;continue;}Console.WriteLine(i);i++;}

حلقه ی بی پایان

با استفاده از قطعه کد زیر می توانید حلقه بی انتها بسازید :

using System;namespace Loops {class Program {static void Main(string[] args) {for (; ; ) {Console.WriteLine("Hey! I am Trapped");}}}

آرایه ها در سی شارپ

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

برای اعلام یک آرایه ، نوع متغیر را با براکت مربع تعریف کنید:

string[] cars

ما اکنون متغیری را اعلام کرده ایم که مجموعه ای از رشته ها را در خود نگه می دارد.

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

string[] cars = {“Volvo”, “BMW”, “Ford”, “Mazda”}

برای ایجاد یک آرایه از اعداد صحیح ، می توانید بنویسید:

int [] myNum = {10 ، ۲۰ ، ۳۰ ، ۴۰} ؛

دسترسی به اندیس آرایه ها

string [] cars = {"ولوو" ، "بی ام و" ، "فورد" ، "مزدا"}؛Console.WriteLine (اتومبیل [۰])؛// ولوو را تولید می کند

برای تغییر مقدار یک عنصر خاص ، به شماره شاخص مراجعه کنید:

string[] cars = {"Volvo", "BMW", "Ford", "Mazda"};cars[0] = "Opel";Console.WriteLine(cars[0]);// Now outputs Opel instead of Volvo

برای بدست آوردن طول آرایه از کد زیر استفاده کنید :

string[] cars = {"Volvo", "BMW", "Ford", "Mazda"};Console.WriteLine(cars.Length);// Outputs 4

یک مثال برای استفاده از آرایه ها در حلقه

string[] cars = {"Volvo", "BMW", "Ford", "Mazda"};for (int i = 0; i < cars.Length; i++){Console.WriteLine(cars[i]);}

مرتب سازی آرایه ها

روشهای مرتب سازی آرایه زیادی در دسترس است ، به عنوان مثال Sort  ، که یک آرایه را به ترتیب حروف الفبا یا به ترتیب صعودی مرتب می کند:

// Sort a stringstring[] cars = {"Volvo", "BMW", "Ford", "Mazda"};Array.Sort(cars);foreach (string i in cars){Console.WriteLine(i);}

استفاده از متدها در سی شارپ

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

می توانید داده هایی را که به عنوان پارامتر شناخته می شوند به یک روش منتقل کنید.

Methods ها برای انجام اقدامات خاصی استفاده می شوند ، و همچنین به عنوان توابع شناخته می شوند.

چرا باید از متدها استفاده کرد؟

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

برای ایجاد یک متد به این شکل اقدام کنید :

class Program{static void MyMethod(){// code to be executed}}

متد ، گروهی از عبارات است که با هم یک وظیفه را انجام می دهند. هر برنامه C # حداقل یک کلاس با متدی به نام Main دارد.

برای استفاده از یک متد شما باید :

  • متد را تعریف کنید
  • متد را صدا کنید
  • از متد در هرکجای برنامه استفاده کنید

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

class NumberManipulator {public int FindMax(int num1, int num2) {/* local variable declaration */int result;if (num1 > num2)result = num1;elseresult = num2;return result;}...}

روش های فراخوانی متد در سی شارپ

با استفاده از نام متد می توانید آن را فراخوانی کنید. به مثال زیر توجه کنید :

using System;namespace CalculatorApplication {class NumberManipulator {public int FindMax(int num1, int num2) {/* local variable declaration */int result;if (num1 > num2)result = num1;elseresult = num2;return result;}static void Main(string[] args) {/* local variable definition */int a = 100;int b = 200;int ret;NumberManipulator n = new NumberManipulator();//calling the FindMax methodret = n.FindMax(a, b);Console.WriteLine("Max value is : {0}", ret );Console.ReadLine();}}}

قطعه کد بالا خروجی زیر را تولید می کند :

Max value is : 200

تا همینجا فعلا کافیه ...

خسته شدید ؟ برای یادگیری هیچ عجله ای نداشته باشید

حدود یک الی دو دقیقه استراحت کنید و سپس ادامه دهید …

پارامترهای متد

اطلاعات را می توان به عنوان پارامتر به متدها منتقل کرد. پارامترها به عنوان متغیرهای درون متد عمل می کنند.

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

مثال زیر یک متد است که رشته ای به نام fname را به عنوان پارامتر در هنگام فراخوانی در نظر می گیرد.

static void MyMethod(string fname){Console.WriteLine(fname + " Refsnes");}static void Main(string[] args){MyMethod("Liam");MyMethod("Jenny");MyMethod("Anja");}// Liam Refsnes// Jenny Refsnes// Anja Refsnes

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

پارامتر پیش فرض متد

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

به مثال زیر توجه کنید :

static void MyMethod(string country = "Norway"){Console.WriteLine(country);}static void Main(string[] args){MyMethod("Sweden");MyMethod("India");MyMethod();MyMethod("USA");}// Sweden// India// Norway// USA

چند پارامتری

به جای یک عدد می توانید چند پارامتر داشته باشید :

static void MyMethod(string fname, int age){Console.WriteLine(fname + " is " + age);}static void Main(string[] args){MyMethod("Liam", 5);MyMethod("Jenny", 8);MyMethod("Anja", 31);}// Liam is 5// Jenny is 8// Anja is 31

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

مقدار بازگشتی 

کلمه کلیدی void که در مثال های بالا استفاده شده است ، نشان می دهد که این روش نباید مقداری را برگرداند. اگر می خواهید متد مقداری را برگرداند ، می توانید از نوع داده اولیه (مانند int یا double) به جای void استفاده کنید و از کلمه کلیدی Return در داخل روش استفاده کنید:

static int MyMethod(int x){return 5 + x;}static void Main(string[] args){Console.WriteLine(MyMethod(3));}// Outputs 8 (5 + 3)

این مثال حاصل جمع دو پارامتر یک متد است

static int MyMethod(int x, int y){return x + y;}static void Main(string[] args){Console.WriteLine(MyMethod(5, 3));}// Outputs 8 (5 + 3)

همچنین می توانید نتیجه را در یک متغیر ذخیره کنید .

static int MyMethod(int x, int y){return x + y;}static void Main(string[] args){int z = MyMethod(5, 3);Console.WriteLine(z);}// Outputs 8 (5 + 3)

استدلال انتقال داده در متد

همچنین می توان آرگومان ها را با فراخوانی نام داده مقدار را ارسال کرد.

این را مثال زدیم تا بدانید ترتیب استدلال ها مهم نیست . به مثال زیر توجه کنید :

static void MyMethod(string child1, string child2, string child3){Console.WriteLine("The youngest child is: " + child3);}static void Main(string[] args){MyMethod(child3: "John", child1: "Liam", child2: "Liam");}// The youngest child is: John

متد ها به چندین روش می توانند نام یکسانی با پارامترهای مختلف داشته باشند:

int MyMethod(int x)float MyMethod(float x)double MyMethod(double x, double y)

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

static int PlusMethodInt(int x, int y){return x + y;}static double PlusMethodDouble(double x, double y){return x + y;}static void Main(string[] args){int myNum1 = PlusMethodInt(8, 5);double myNum2 = PlusMethodDouble(4.3, 6.26);Console.WriteLine("Int: " + myNum1);Console.WriteLine("Double: " + myNum2);}

به جای تعریف دو متد که باید همان کار را انجام دهند ، بهتر است یکی را بیش از حد Overloading کنید.

static int PlusMethod(int x, int y){return x + y;}static double PlusMethod(double x, double y){return x + y;}static void Main(string[] args){int myNum1 = PlusMethod(8, 5);double myNum2 = PlusMethod(4.3, 6.26);Console.WriteLine("Int: " + myNum1);Console.WriteLine("Double: " + myNum2);}

 OOP در سی شارپ چیست؟

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

برنامه نویسی شی گرا دارای مزایای متعددی نسبت به برنامه نویسی رویه ای است:

  • اجرای OOP سریعتر و آسانتر انجام می شود
  • OOP ساختار شفاف تری برای برنامه ها فراهم می کند
  • OOP اصلاح و اشکال زدایی کد را آسان می کند
  • OOP امکان ایجاد برنامه های کامل قابل استفاده مجدد با کد کمتر و زمان توسعه کوتاهتر را فراهم می کند

کلاسها و اشیا چیست؟

کلاسها و اشیا دو جنبه اصلی برنامه نویسی شی گرا هستند.
به تصویر زیر نگاه کنید تا تفاوت کلاس و اشیا را ببینید:

کلاسها و اشیا

هر چیزی در C # همراه با ویژگی ها و روش های آن با کلاس ها و اشیا مرتبط است. به عنوان مثال: در زندگی واقعی ، ماشین یک شی است. این خودرو دارای خصوصیاتی مانند وزن و رنگ و روش هایی مانند رانندگی و ترمز دارد.

Class مانند سازنده شی یا “طرح اصلی” برای ایجاد اشیا است.

به مثال زیر توجه کنید :

class Car{string color = "red";}

ایجاد یک شی

به طور کلی یک شی از یک کلاس ایجاد می شود. ما قبلاً کلاسی را با نام Car ایجاد کرده ایم ، بنابراین اکنون می توانیم برای ایجاد اشیا از این کلاس استفاده کنیم.
برای ایجاد یک شی از اتومبیل ، نام کلاس و سپس نام شی را مشخص کنید و برای اینکار از کلمه کلیدی new استفاده کنید:

class Car{string color = "red";static void Main(string[] args){Car myObj = new Car();Console.WriteLine(myObj.color);}
class Car{string color = "red";static void Main(string[] args){Car myObj1 = new Car();Car myObj2 = new Car();Console.WriteLine(myObj1.color);Console.WriteLine(myObj2.color);}}

استفاده از کلاسهای متعدد
همچنین می توانید یک شی از یک کلاس ایجاد کرده و در کلاس دیگری به آن دسترسی پیدا کنید. این اغلب برای سازماندهی بهتر کلاسها استفاده می شود (یک کلاس همه زمینه ها و روش ها را دارد ، در حالی که کلاس دیگر متد Main () را نگه می دارد (کدی که باید اجرا شود).

prog2.cs

class Car{public string color = "red";}

prog.cs

class Program{static void Main(string[] args){Car myObj = new Car();Console.WriteLine(myObj.color);}}

آیا به کلمه کلیدی public توجه کرده اید؟ این یک اصلاح کننده دسترسی نامیده می شود ، که مشخص می کند متغیر رنگ / قسمت Car برای کلاسهای دیگر ، مانند Program نیز قابل دسترسی است.

در ادامه درباره اصلاح کننده ها و کلاسها / اشیا و میزان دسترسی بسیار بیشتر مثال خواهیم زد .

اعضای کلاس

در مثال زیر یک کلاس اتومبیل با سه عضو کرده ایم :

class MyClass{// Class membersstring color = "red";// fieldint maxSpeed = 200;// fieldpublic void fullThrottle()// method{Console.WriteLine("The car is going as fast as it can!");}}

فیلدهای کلاس 

متغیرهای داخل کلاس همان فیلدها هستند که می توانید با ایجاد یک شی از کلاس و با استفاده از نقطه (.) به آنها دسترسی پیدا کنید.

مثال زیر یک شی از کلاس Car با نام myObj ایجاد می کند.

class Car{string color = "red";int maxSpeed = 200;static void Main(string[] args){Car myObj = new Car();Console.WriteLine(myObj.color);Console.WriteLine(myObj.maxSpeed);}}

همچنین می توانید فیلدها را خالی بگذارید و هنگام ایجاد شی آنها را مقدار دهی کنید :

class Car{string color;int maxSpeed;static void Main(string[] args){Car myObj = new Car();myObj.color = "red";myObj.maxSpeed = 200;Console.WriteLine(myObj.color);Console.WriteLine(myObj.maxSpeed);}}
تا همینجا فعلا کافیه ...

خسته شدید ؟ برای یادگیری هیچ عجله ای نداشته باشید

حدود یک الی دو دقیقه استراحت کنید و سپس ادامه دهید …

سازنده در سی شارپ

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

// Create a Car classclass Car{public string model;// Create a field// Create a class constructor for the Car classpublic Car(){model = "Mustang"; // Set the initial value for model}static void Main(string[] args){Car Ford = new Car();// Create an object of the Car Class (this will call the constructor)Console.WriteLine(Ford.model);// Print the value of model}}// Outputs "Mustang"

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

پارامترهای سازنده ها

سازنده ها همچنین می توانند پارامترهایی را بدست آورند که از آنها برای مقداردهی اولیه فیلدها استفاده می شود.

مثال زیر پارامتر رشته ای modelName را به سازنده اضافه می کند. در داخل سازنده ما مدل را به modelName تنظیم می کنیم (model = modelName). وقتی سازنده را صدا می کنیم ، یک پارامتر به سازنده می دهیم (“Mustang”) ، که مقدار مدل را به “Mustang” ارسال می کند :

class Car{public string model;// Create a class constructor with a parameterpublic Car(string modelName){model = modelName;}static void Main(string[] args){Car Ford = new Car("Mustang");Console.WriteLine(Ford.model);}

سطح دسترسی در سی شارپ

به احتمال زیاد شما در قطعه کدهای بالا با کلمه کلیدی public برخورد کرده اید . به طور مثال این کلمه کلیدی شبیه مثال زیر تعریف میشد :

public string color;

کلید واژه public یک روش ایجاد سطح دسترسی است که مشخص می کند که تا چه محدوده ای از برنامه مجاز به دسترسی به آن هستند .

انواع سطوح دسترسی

سطح public : کد برای همه کلاسها قابل دسترسی است
سطح private : این کد فقط در همان کلاس قابل دسترسی است
سطح protection : این کد در همان کلاس یا در کلاسی قابل دسترسی است که از آن کلاس ارث بری کرده باشد .
سطح internal : این کد فقط در مونتاژ خودش قابل دسترسی است ، اما از مونتاژ دیگری قابل دسترسی نیست.

اگر فیلدی را با سطح دسترسی خصوصی اعلام کنید ، فقط در همان کلاس قابل دسترسی است:

class Car{private string model;static void Main(string[] args){Car Ford = new Car("Mustang");Console.WriteLine(Ford.model);}

در زیر یک مثال برای سطح دسترسی عمومی را مشاهده می کنید :

class Car{public string model = "Mustang";}class Program{static void Main(string[] args){Car myObj = new Car();Console.WriteLine(myObj.model);}}

خصوصیات و کپسوله سازی در سی شارپ

Properties and Encapsulation

قبل از شروع توضیح ویژگی ها ، شما باید درک اولیه ای از “Encapsulation” داشته باشید. منظور از Encapsulation این است که مطمئن شوید داده های “حساس” از دید کاربران پنهان مانده است. برای رسیدن به این هدف ، باید: فیلدها را مشخص کنید :

فیلدها / متغیرها را به صورت خصوصی اعلام کنید
روش های عمومی دریافت و تنظیم را از طریق ویژگی ها برای دسترسی و به روزرسانی مقدار یک فیلد خصوصی فراهم کنید

خصوصیات

قبلتر آموختید متغیرهای خصوصی فقط در همان کلاس قابل دسترسی هستند (یک کلاس خارج به آن دسترسی ندارد). با این حال ، گاهی اوقات ما نیاز به دسترسی به آنها داریم – و این می تواند با خصوصیات انجام شود.

خصوصیات با Get and Set تعریف می شوند :

class Person {
  private string name; // fieldpublic string Name
  // property
  {get { return name; }
  // get method
  set { name = value; }// set method
  }
}

در قطعه کد بالا ویژگی Name با قسمت name مرتبط است.
متد get مقدار نام متغیر را برمی گرداند
متد set مقداری را به متغیر name اختصاص می دهد. کلمه کلیدی مقدار نشان دهنده مقداری است که به خاصیت آن اختصاص می دهیم.

class Person {
  private string name; {
    get {
      return name;
    }
    set {
      name = value;
    }
  }
}
class Program {
  static void Main(string[] args) {
    Person myObj = new Person();
    myObj.Name = "Liam";
    Console.WriteLine(myObj.Name);
  }
}

 

کار با فایل ها در سی شارپ

زبان سی شارپ روش های بسیار زیادی را برای انجام عملیات روی فایل و پرونده ها دارد .به طور مثال عملیاتی مانند ایجاد یک فایل ، کپی و انتقال یک پرونده ، حذف پرونده ها و عملیات خواندن و نواشتن در فایل ها که توسط کلاس File انجام می شود . کلاس File در فضای نام System.IO تعریف شده است.

using System.IO;
File.SomeFileMethod(); // use the file class with methods

انواع عملیاتی که File در سی شارپ در اختیار شما قرار می دهد :

۱- copy : این روش برای کپی کردن یک فایل در مکان مشخص استفاده می شود.

۲- create : این روش برای ایجاد پرونده در مسیر مشخص استفاده می شود.

۳- Delete : این روش برای حذف پرونده استفاده می شود.

۴- Open : این روش برای بازگرداندن یک شی filetream در مسیر مشخص شده استفاده می شود.

۵- Move : یک پرونده مشخص را به مکان جدید منتقل می کند. می توانیم نام متفاوتی برای پرونده در مکان جدید تعیین کنیم.

۶- Exists : مشخص می کند که فایل مشخص شده وجود دارد یا خیر.

۷- OpenRead : پرونده موجود را برای خواندن باز می کند.

۸- OpenWrite : یک پرونده موجود را باز می کند یا یک پرونده جدید برای نوشتن ایجاد می کند.

نوشتن در یک فایل با سی شارپ

در مثال زیر ، از روش WriteAllText برای ایجاد فایلی با نام “filename.txt” استفاده کرده و یک خط محتوا را درون آن می نویسیم. سپس از روش () ReadAllText برای خواندن محتویات پرونده ساخته شده استفاده می کنیم:

using System.IO; 
string writeText = "Hello World!";
File.WriteAllText("filename.txt", writeText);
string readText = File.ReadAllText("filename.txt");
Console.WriteLine(readText);// Output the content

خروجی قطعه کد بالا عبارت Hello World! است .

مثال کامل زیر یک فایل را ایجاد و محتویاتی را درون آن می نویسد :

به مسیر ذخیره سازی حتما توجه کنید :

using System;
using System.IO;
class Test {
  public static void Main() {
    string path = @ "c:tempMyTest.txt";
    if (!File.Exists(path)) {
      (StreamWriter sw = File.CreateText(path)) {
        sw.WriteLine("Hello") sw.WriteLine("And");
        sw.WriteLine("Welcome");
      }
    }(StreamReader sr = File.OpenText(path)) {
      string s;
      while ((s = sr.ReadLine()) != null) {
        Console.WriteLine(s);
      }
    }
  }
}

یک مثال برای حذف فایل

string path = @ "D:MyTest1.txt";
File.Delete(path);
Console.WriteLine("File has been deleted");

یک مثال برای بررسی وجود داشتن یک فایل

string path = @ "D:MyTestFile1.txt";
Console.WriteLine(File.Exists(path) ? "File exists." : "File does not exist.");

یک مثال برای کپی کردن یک فایل

string path = @ "D:MyTestFile1.txt";
string path1 = @ "D:MyTest1.txt";
File.Copy(path, path1);
Console.WriteLine("File has been copied");

یک مثال برای انتقال فایل

string path = @ "D:MyTestFile1.txt";
string path1 = @ "c:MyTest1.txt";
File.Move(path, path1);
Console.WriteLine("File has been moved");

پخش صدا / موسیقی در سی شارپ

می توانید با استفاده از مثال زیر یک فایل صوتی پخش کنید :

قبل از تست کد مسیر c:WindowsMediachimes.wav را با مسیر یک فایل wav در کامپیوتر خود تعویض کنید .

private void playSimpleSound() {
  SoundPlayer simpleSound = new SoundPlayer(@ "c:WindowsMediachimes.wav");
  simpleSound.Play();
}

پخش فایل های mp3

همچنین برای پخش صداهایی به غیر از wav نظیر فرمت محبوب mp3 می توانید از کد زیر استفاده کنید .

برای استفاده از این قطعه کد ابتدا مراحل زیر را دنبال کنید :

در ویژوال استودیو

به Project-> Add Class بروید. نامی برای کلاس مانند “MusicPlayer” تایپ کنید و OK را کلیک کنید.

سپس از طریق کد زیر DllImport را انجام دهید تا فایل ها فراخوانی winmm.dll انجام شود .

using System.Runtime.InteropServices;
using System.Text;
namespace MP3_Player {
  class MusicPlayer {
    [DllImport("winmm.dll")] private static extern long mciSendString(string lpstrCommand, StringBuilder lpstrReturnString, int uReturnLength, int hwndCallback);
  }
}

 

ویژگی DllImport به ما این امکان را می دهد تا در فایل کتابخانه ای winmm.dll به قابلیت های آن دسترسی داشته باشیم که یکی از آنها امکان پخش موسیقی با فرمت mp3 است .

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

حال کلاس خود را به شکل زیر تکمیل کنید :

using System.Runtime.InteropServices;
using System.Text;
namespace MP3_Player {
  class MusicPlayer {
    [DllImport("winmm.dll")] private static extern long mciSendString(string lpstrCommand, StringBuilder lpstrReturnString, int uReturnLength, int hwndCallback);
    public void open(string file) {
      string command = "open "
      " + file + "
      " type MPEGVideo alias MyMp3";
      mciSendString(command, null, 0, 0);
    }
    public void play() {
      string command = "play MyMp3";
      mciSendString(command, null, 0, 0);
    }
    public void stop() {
      string command = "stop MyMp3";
      mciSendString(command, null, 0, 0);
      command = "close MyMp3";
      mciSendString(command, null, 0, 0);
    }
  }
}

 

به جای استفاده از MyMp3 از آدرس فایل خود استفاده کرده و برنامه را تست کنید .

استثنائات در سی شارپ

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

در اینگونه موارد زبان سی شارپ به طور معمول متوقف می شود و پیام خطایی را ایجاد می کند.مدیریت خطای “”ترای”” اصطلاح فنی برای این عبارت است . در واقع سی شارپ یک استثنا را مدیریت می کند (خطا را پرتاب می کند) و در نتیجه برنامه روند دیگری را در نظر می گیرد .

مدیریت خطا

در سی شارپ try and catch عبارت try به شما این امکان را می دهد تا مجموعه ای از کدها را به گونه ای تعیین کنید تا هنگام اجرا از نظر خطا مورد بررسی قرار بگیرند و سپس در صورت وقوع خطا دستور catch به شما این امکان را می دهد تا در بلوک try که خطا رخ داده بود یک راه حل دیگر یا پیغام مناسب تری ارسال شود .

کلمات کلیدی try and catch به صورت جفت کدنویسی شده و تنها به کار برده نمی شوند :

try {
  //Block of code to try 
} catch (Exception e) 
{
  //Block of code to handle errors
}

 

برای تست عملکرد try and catch می توانید مثال زیر را دنبال کنید :

مثال زیر را در نظر بگیرید ، جایی که ما یک آرایه ای از سه عدد صحیح را ایجاد کرده ایم و قطعه کد زیر را برای آن نوشته ایم :

int[] myNumbers = {
  ۱,
  ۲,
  ۳
};
Console.WriteLine(myNumbers[10]); // error!

 

با اجرای کد بالا با خطای : System.IndexOutOfRangeException: ‘Index was outside the bounds of the array.’ رو به رو می شوید چراکه اندیس ۱۰ آرایه myNumbers [10] وجود ندارد . 

اگر خطایی رخ دهد ، می توانیم از try … catch برای گرفتن خطا استفاده کنیم و برای مدیریت آن چند کد دیگر را اجرا کنیم.

در مثال زیر ، ما از متغیر داخل بلوک catch (e) به همراه ویژگی Message استفاده می کنیم که پیامی را برای توصیف این خطای اتفاق افتاده نمایش دهد .

try {
  int[] myNumbers = {
    ۱,
    ۲,
    ۳
  };
  Console.WriteLine(myNumbers[10]);
} catch (Exception e) {
  Console.WriteLine(e.Message);
}

 

یا به طور دیگر می توانید پیام خطای خودتان را بنویسید :

try {
  int[] myNumbers = {
    ۱,
    ۲,
    ۳
  };
  Console.WriteLine(myNumbers[10]);
} catch (Exception e) {
  Console.WriteLine("Something went wrong.");
}

 

دستور نهایی برای مدیریت خطا

دستور نهایی یا Finally به شما این امکان را می دهد که بدون توجه به نتیجه try and catch کد نهایی را اجرا کنید:

ممکن است کمی پیچیده باشد . به مثال زیر توجه کنید :

try {
  int[] myNumbers = {
    ۱,
    ۲,
    ۳
  };
  Console.WriteLine(myNumbers[10]);
} catch (Exception e) {
  Console.WriteLine("Something went wrong.");
} finally {
  Console.WriteLine("The 'try catch' is finished.");
}

 

خروجی قطعه کد بالا به شکل زیر می باشد :

Something went wrong.
The ‘try catch’ is finished

پرتاب خطا یا عبور از خطا در سی شارپ

کلمه کلیدی پرتاب throw به شما امکان ایجاد یک خطای سفارشی را می دهد. دستور throw همراه با یک کلاس استثنا استفاده می شود. کلاس های استثنای بسیار زیادی در سی شارپ وجود دارد نظیر :

ArithmeticException، FileNotFoundException، IndexOutOfRangeException، TimeOutException و غیره …

static void checkAge(int age) {
  if (age < 18) {
    throw new ArithmeticException("Access denied - You must be at least 18 years old.");
  } else {
    Console.WriteLine("Access granted - You are old enough!");
  }
}
static void Main(string[] args) {
  checkAge(15);
}

 

پیام خطایی که در برنامه نمایش داده می شود:

System.ArithmeticException: ‘Access denied – You must be at least 18 years old.’

رویداد ها در سی شارپ

رویدادها اقدامات کاربر مانند فشار دادن کلید ، کلیک l,s ، حرکات ماوس و .. است . برنامه هایی که به زبان سی شارپ نوشته می شوند باید هنگام وقوع به رویدادها نوع رویداد را شناسایی و پاسخ مناسب را ارسال کنند .

به طور کلی :

وقتی با ماوس کلیک می کنید – این رویدادهای کلیک ماوس است.
وقتی که هر کلید را در صفحه کلید فشار می دهید – این رویدادهای KeyPress است.
وقتی که صفحه وب خود را رفرش می کنید – این رویدادهای بارگیری صفحه است.
وقتی که مکان نمای موس را حرکت می دهید – این رویداد حرکت ماوس است .

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

// Declare the delegatepublic 
delegate void SampleDelegate();
//Declare an eventpublic event SampleDelegate 
SampleEvent;

 

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

class Program {
  static void Main() {
    var c = new Counter();
    c.ThresholdReached += c_ThresholdReached;
  }
  static void c_ThresholdReached(object sender, EventArgs e) {
    Console.WriteLine("The threshold was reached.");
  }
}

 

خط کد c.ThresholdReached += c_ThresholdReached رویداد ما را می سازد .

چند وظیفگی در سی شارپ

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

نکته مهم اینجاست : 

که اگر برنامه دچار وقفه شده بود پس از وقفه چه اتفاقی افتاد ؟ 

۱- اگر برنامه با خطایی مواجه شد به منزله ی باگ برنامه تلقی می گردد و باید منتظر آپدیت آن باشید .

۲- اگر برنامه پس از اتمام وقفه با هیچ خطا یا پیغامی رو به رو نشد حتما احساس خواهید کرد که برنامه یک ویژگی را در خود کم دارد و آن ویژگی چند وظیفه گی است .

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

ویژگی Multithreading چیست ؟

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

Multithreading فرآیندهای سبکی در درون قسمت های مختلف یک برنامه هستند. یکی از نمونه های متداول استفاده از thread اجرای برنامه نویسی همزمان توسط سیستم عامل های مدرن است. استفاده از چند وظیفگی باعث صرفه جویی در اتلاف چرخه پردازنده و افزایش کارایی یک برنامه می شود.

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

به قطعه کد زیر توجه کنید :

using System;
using System.Threading;
namespace MultithreadingApplication {
  class MainThreadProgram {
    static void Main(string[] args) {
      Thread th = Thread.CurrentThread;
      th.Name = "MainThread";
      Console.WriteLine("This is {0}", th.Name);
      Console.ReadKey();
    }
  }
}

 

هنگامی که کد فوق کامپایل و اجرا می شود ، نتیجه زیر را ایجاد می کند :

This is MainThread

هنگامی که یک برنامه C # شروع به اجرا می کند ، تابع ,main به طور خودکار ایجاد می شود. رشته هایی که با استفاده از کلاس Thread ایجاد می شوند در روند فعلی برنامه خللی ایجاد نمی کنند تا مادامی که برنامه آنها را فراخوانی کند . با استفاده از ویژگی CurrentThread کلاس Thread می توانید به یک وظیفه از قبل تعریف شده دسترسی پیدا کنید.

اجرای یک Thread در سی شارپ

وظیفه ها با گسترش کلاس Thread ایجاد می شوند. سپس کلاس Thread برای شروع اجرای موضوع ، متد Start () را فراخوانی می کند.

برای درک کامل این موضوع به مثال زیر توجه کنید :

using System;
using System.Threading;
namespace MultithreadingApplication {
  class ThreadCreationProgram {
    public static void CallToChildThread() {
      Console.WriteLine("Child thread starts");
    }
    static void Main(string[] args) {
      ThreadStart childref = new ThreadStart(CallToChildThread);
      Console.WriteLine("In Main: Creating the Child thread");
      Thread childThread = new Thread(childref);
      childThread.Start();
      Console.ReadKey();
    }
  }
}

 

هنگامی که کد فوق کامپایل و اجرا می شود ، نتیجه زیر را ایجاد می کند :

In Main: Creating the Child thread
Child thread starts

در کد بالا ابتدا یک Thread برای شروع ایجاد می شود و سپس در خط بعدی یک پیام چاپ می شود که که نشان می دهد Thread از داخل main اصلی اجرا شده است . سپس در خط کد بعدی یک Thread جدید برای فراخوانی تعریف شده و با دستور start به سراغ Thread شروع کننده می رود . سرآخر این Thread شروع کننده تابع CallToChildThread را صدا میزند که حاوی چاپ یک پیام است .

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

برای درک بهتر این موضوع از sleep می توانید استفاده کنید تا با زمان بندی دقیق ببینید که پیام ها چه زمانی چاپ می شوند .

مدیریت Thread در سی شارپ

کلاس Thread روشهای مختلفی را برای مدیریت وظایف تعریف شده ارائه می دهد.

مثال زیر استفاده از روش sleep برای ایجاد مکث بین اجرای کدها برای مدت زمان مشخصی را نشان می دهد. برای درک بهتر این موضوع قطعه کد زیر را تست و اجرا کنید :

using System;
using System.Threading;
namespace MultithreadingApplication {
  class ThreadCreationProgram {
    public static void CallToChildThread() {
      Console.WriteLine("Child thread starts");
      millisecondsint sleepfor = 5000;
      Console.WriteLine("Child Thread Paused for {0} seconds", sleepfor / 1000);
      Thread.Sleep(sleepfor);
      Console.WriteLine("Child thread resumes");
    }
    static void Main(string[] args) {
      ThreadStart childref = new ThreadStart(CallToChildThread);
      Console.WriteLine("In Main: Creating the Child thread");
      Thread childThread = new Thread(childref);
      childThread.Start();
      Console.ReadKey();
    }
  }
}

هنگامی که کد فوق کامپایل و اجرا می شود ، نتیجه زیر را ایجاد می کند :

In Main: Creating the Child thread
Child thread starts
Child Thread Paused for 5 seconds
Child thread resumes

همانطور که مشاهده کردید برنامه با تعیین زمان بندی های مشخصی هر خط کد را اجرا می کند .

 

بعد از اتمام آموزش چه کاری انجام بدیم ؟

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

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

از چه منابع ای برای یادگیری استفاده کنیم ؟

می توانید از سایت های Udemy ، GitHub ، tutorialspoint ، CodeAcademy و سایر منابع آموزشی فارسی زبان استفاده کنید .

چقدر زمان بین هر آموزش بزاریم ؟

برای یادگیری هر آموزش جدید حداقل یک هفته برای تمرین کردن های بیشتر و حداکثر یک ماه برای نوشتن یک پروژه با آن زبان زمان نیاز خواهید داشت .

آیا یادگیری زبان ها اولویت دارند ؟

در حال حاضر خیر . شما بر اساس نیاز یا آشنایی قبلی که با آن زبان دارید آموزش را شروع کنید . همچنین نیم نگاهی به وضعیت بازار کار آن زبانی که قصد یادگیریش را دارید بهتر است .

بعد از آموزش چکار کنیم ؟

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

به طور مثال یک پروژه کوچک مثل دفترچه یادداشت یا ماشین حساب که بسیار ساده هستند و در صورتی که دیدید علاقمندتر شدید پروژه تان را گسترش دهید .

فراموش نکنید : تمرین ، تکرار و پروژه !

آیا نقطه شروع تمام موارد را آموزش داده است ؟

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

آیا استفاده از آموزش های بعدی هزینه دارد ؟

خیر .

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

در رابطه با آموزش های نقطه شروع سوالی دارید ؟

بر روی دکمه زیر کلیک کنید و سوالتان را آنجا بپرسید

با ما در ارتباط باشید !