در آموزش شی گرایی در سی شارپ مفاهیم کلاسها یا اشیا، سازنده یا کانستراکتور و نابودکننده یا Destructor، اورلودشدن فانکشن، ارثبری و … از اهمیت بالایی برخوردار هستند. مفهوم کلاس در واقع یک مفهوم کلی و یک الگو است که شی از روی آن ساخته شده و از طرف دیگر یک شی نیز نمونهای است که از کلاس مدنظر ایجاد شده است. کلاسها از دو عنصر حیاتی متغیر یا فیلد و متد ساخته میشوند. این متغیرها و متدها سطوح دسترسی متفاوتی مانند public، private و … دارند که برحسب نیاز هریک قابل استفاده خواهند بود. بوت کمپ برنامه نویسی برای تخصص در این زمینه کنار شماست.
در سی شارپ امکان ارث بردن ویژگیها و متدهای یک کلاس توسط کلاس دیگر نیز وجود دارد. وقتی که چندین کلاس به یکدیگر مرتبط باشند و از هم به ارث برده باشند میتوان از مفهوم پلیمورفیسم برای تغییر متدهای هریک از این کلاسها برحسب نیازهای آن کلاس استفاده کرد. در بوت کمپ سی شارپ تمامی این موارد به صورت عملی و کاربری آموزش داده می شود.

مفهوم کلاس و شی در سی شارپ
در یادگیری برنامه نویسی مفاهیم را باید بلد باشید، کلاسها و اشیا دو جنبه اصلی در برنامه نویسی شی گرا سی شارپ هستند. برای درک تفاوت بین این دو برای مثال میوه یک کلاس خواهد بود که اشیا ساخته شده از آن شامل سیب، موز، هندوانه و … میشوند. از طرف دیگر اگر کلاس ماشین داشته باشیم در این صورت پراید، پژو، سانتافه و … اشیا این کلاس خواهند بود. به طور کلی یک کلاس الگویی برای اشیا بوده و از طرف دیگر یک شی نمونهای از یک کلاس است. زمانی که اشیا ایجاد میشوند تمامی متغیرها و متدها را از یک کلاس به ارث میبرند.
اجازه دهید در مثال زیر یک کلاس ماشین را در سی شارپ ایجاد کنیم:
class Car
{
string color = “red”;
{
حال اگر بخواهیم یک شی از این کلاس ایجاد کنیم کافی است که نام کلاس را استفاده کرده و به دنبال آن نام شی مدنظر را تعیین کرده و سپس از کلمه کلیدی 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);
}
}
اعضای کلاس در شی گرایی
در آموزش شی گرایی در سی شارپ باید با اعضای یک کلاس نیز آشنا شوید. فیلدها و متدهایی که درون کلاس تعیین میشوند اغلب بهعنوان اعضای کلاس شناخته خواهند شد. برای مثال در نمونه کد زیر ما یک کلاس ماشین ساختهایم که دارای دو فیلد و یک متد است:
// The class
class MyClass
{
// Class members
string color = “red”; // field
int maxSpeed = 200; // field
public void fullThrottle() // method
{
Console.WriteLine(“The car is going as fast as it can!”);
}
}
متغیرهایی که داخل کلاس تعریف میشوند در واقع یک فیلد برای آن کلاس هستند که بعد از ایجاد شی از کلاس مدنظر میتوان با استفاده از نقطه به آنها دسترسی پیدا کرد. مثال زیر یک شی از کلاس car را با نام myObj ایجاد میکند و سپس مقدار فیلدهای color و maxSpeed را با استفاده از آن چاپ میکند:
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);
}
}
این کار به ویژه در زمان ایجاد چندین شی از یک کلاس مفید خواهد بود:
class Car
{
string model;
string color;
int year;
static void Main(string[] args)
{
Car Ford = new Car();
Ford.model = “Mustang”;
Ford.color = “red”;
Ford.year = 1969;
Car Opel = new Car();
Opel.model = “Astra”;
Opel.color = “white”;
Opel.year = 2005;
Console.WriteLine(Ford.model);
Console.WriteLine(Opel.model);
}
}
در زبان برنامهنویسی سی شارپ متدها معمولا به یک کلاس تعلق داشته و رفتار یک شی از کلاس را تعریف میکنند. کارکرد آنها در آموزش برنامه نویسی درست مانند فیلدهاست. شما میتوانید با کمک یک نقطه به آنها دسترسی پیدا کنید. با این حال توجه داشته باشید که متد مدنظر شما حتما باید بهصورت عمومی تعریف شده باشد. به یاد داشته باشید که ما از نام متد به دنبال دو پرانتز و نقطه ویرگول استفاده میکنیم. کد زیر را مشاهده کنید:
class Car
{
string color; // field
int maxSpeed; // field
public void fullThrottle() // method
{
Console.WriteLine(“The car is going as fast as it can!”);
}
static void Main(string[] args)
{
Car myObj = new Car();
myObj.fullThrottle(); // Call the method
}
}
کانستراکتورها در شی گرایی سی شارپ
مفهوم مهم دیگر در آموزش شی گرایی در سی شارپ مفهوم کانستراکتور یا سازنده است. با استفاده از کانستراکتورها میتوانیم شی مدنظر خود را مقداردهی اولیه کنیم. در واقع شما میتوانید به تمامی فیلدهایی که در یک کلاس وجود دارند مقدار دهید که این کار از طریق کانستراکتور و در زمان ساخت شی از یک کلاس انجام میشود.برای یادگیری پارامترها در کانستراکتور بیشتر بخوانید.
قطعه کد زیر را در این زمینه مشاهده کنید:
public class Person
{
public string FirstName { get; set; }
public string LastName { get; set; }
public DateTime DateOfBirth { get; set; }
public string Nationality { get; set; }
public string SocialSecurityNumber { get; set; }
public Person(string firstName, string lastName, DateTime dateOfBirth,
string nationality, string socialSecurityNumber)
{
FirstName = firstName;
LastName = lastName;
DateOfBirth = dateOfBirth;
Nationality = nationality;
SocialSecurityNumber = socialSecurityNumber;
}
public void SayHello()
{
Console.WriteLine($”Hi, my name is {FirstName} {LastName}”);
}
}
حال اگر بخواهیم از این کانستراکتور در کدهای خود و در آموزش برنامه نویسی #c، در زمان ساخت شی استفاده کنیم میتوانیم به شکل زیر عمل کنیم:
class Program
{
static void Main(string[] args)
{
Person person = new Person(“Bruce”, “Wayine”, DateTime.Now, “American”, “12345”);
person.SayHello();
}
}

اصلاحکننده دسترسی در شی گرایی سی شارپ
در مثالهای بالا با کلمه کلیدی public آشنا شده و آن را مشاهده کردهاید:
public string color;
کلمه کلیدی public یک اصلاحکننده دسترسی است که برای تنظیم سطح دسترسی برای کلاسها، فیلدها، متدها و ویژگیهای کلاس استفاده میشود. زبان برنامهنویسی سی شارپ دارای اصلاحکنندههای زیر است:
|
اصلاح کننده |
توضیحات |
|
public |
کد برای تمامی کلاسها قابل دسترسی است. |
|
private |
کد مدنظر تنها در همان کلاس قابل دسترسی است. |
|
Protected |
کد در همان کلاس یا در کلاسی که از آن به ارث رسیده است قابل دسترسی خواهد بود. |
|
internal |
این کد تنها در اسمبلی خود قابل دسترسی خواهد بود؛ ولی نمیتوان در اسمبلی دیگری به آن دسترسی پیدا کرد. |
اگر فیلدی را با اصلاحکننده دسترسی private اعلام کنید تنها در همان کلاس قابل دسترسی خواهد بود:
class Car
{
private string model = “Mustang”;
static void Main(string[] args)
{
Car myObj = new Car();
Console.WriteLine(myObj.model);
}
}
خروجی این کد Mustang خواهد بود.
اگر فیلدی را با اصلاحکننده دسترسی public اعلام کنید در همه کلاسها قابل دسترسی خواهد بود:
class Car
{
public string model = “Mustang”;
}
class Program
{
static void Main(string[] args)
{
Car myObj = new Car();
Console.WriteLine(myObj.model);
}
}
خروجی این کد Mustang است.
متد ویژگیها یا همان متدهای Get و Set
قبل از هر چیز شما باید درک اساسی از Encapsulation را به دست آورده باشید. منظور از Encapsulation این است که اطمینان حاصل شود که دادههای حساس در یک کلاس از کاربران پنهان هستند. برای رسیدن به این هدف باید اقدامات زیر انجام شوند:
- فیلدها و متغیرهای خود را بهصورت خصوصی اعلام کنید.
- برای دسترسی و به روزرسانی مقدار یک فیلد خصوصی از متدهای Get و Set استفاده کنید.
معمولا وقتی که قصد دارید به متغیرهای خصوصی یک کلاس دسترسی پیدا کنید باید برای هر متغیر دو متد را نیز ایجاد کنید که این متدها به ترتیب Get و Set هستند.
class Person
{
private string name; // field
public string Name // property
{
get { return name; } // get method
set { name = value; } // set method
}
}
برای درک بهتر این موضوع مثال زیر را بادقت مشاهده کنید:
class Person
{
private string name; // field
public string Name // property
{
get { return name; }
set { name = value; }
}
}
class Program
{
static void Main(string[] args)
{
Person myObj = new Person();
myObj.Name = “Liam”;
Console.WriteLine(myObj.Name);
}
}
خروجی این قطعه کد Liam است.

وراثت و ارثبری در سی شارپ
یکی از مفاهیمی که در بوت کمپ سی شارپ به طور گستردهای مطرح شده و تمرینات زیادی نیز برای آن ارائه میشود مفهوم وراثت یا ارثبری است. در زبان برنامهنویسی سی شارپ امکان ارث بردن فیلدها و متدها از یک کلاس به کلاس دیگر وجود دارد. ما مفهوم وراثت را به دو دسته تقسیم میکنیم:
کلاس مشتق شده (فرزند): کلاسی که از یک کلاس دیگر ارث میبرد.
کلاس پایه (والد) کلاسی که از آن ارث برده شده است.
در زبان برنامهنویسی سی شارپ برای ارث بردن از یک کلاس از نماد : استفاده میشود.
در مثال زیر کلاس Car که یک کلاس فرزند است فیلدها و متدها را از کلاس Vehicle که والد است به ارث میبرد:
public class A
{
private int _value = 10;
public class B : A
{
public int GetValue()
{
return _value;
}
}
}
public class C : A
{
// public int GetValue()
// {
// return _value;
// }
}
public class AccessExample
{
public static void Main(string[] args)
{
var b = new A.B();
Console.WriteLine(b.GetValue());
}
}
// The example displays the following output:
// 10
پلیمورفیسم و override کردن متدها
پلیمورفیسم معمولا به معنای اشکال مختلف است و زمانی اتفاق میافتد که ما کلاسهای زیادی داشته باشیم که از طریق وراثت به یکدیگر مرتبط هستند. پلیمورفیسم در واقع تلا میکند تا از متدهای ثابت کلاس برای انجام کارهای مختلف استفاده کند. برای مثال اجازه دهید تا کلاس پایه خود را با نام Animal در نظر بگیریم که متدی به نام animalSound دارد. کلاسهای مشتق شده از این کلاس میتوانند شامل خوکها، گربهها، سگها و پرندگان باشند که هریک دارای صداهای مخصوص به خود هستند:
class Animal // Base class (parent)
{
public void animalSound()
{
Console.WriteLine(“The animal makes a sound”);
}
}
class Pig : Animal // Derived class (child)
{
public void animalSound()
{
Console.WriteLine(“The pig says: wee wee”);
}
}
class Dog : Animal // Derived class (child)
{
public void animalSound()
{
Console.WriteLine(“The dog says: bow wow”);
}
}
حال میتوانیم اشیا Pig و Dog را ایجاد کرده و متد animalSound را برای هر دو آنها فراخوانی کنیم:
class Animal // Base class (parent)
{
public virtual void animalSound()
{
Console.WriteLine(“The animal makes a sound”);
}
}
class Pig : Animal // Derived class (child)
{
public override void animalSound()
{
Console.WriteLine(“The pig says: wee wee”);
}
}
class Dog : Animal // Derived class (child)
{
public override void animalSound()
{
Console.WriteLine(“The dog says: bow wow”);
}
}
class Program
{
static void Main(string[] args)
{
Animal myAnimal = new Animal(); // Create a Animal object
Animal myPig = new Pig(); // Create a Pig object
Animal myDog = new Dog(); // Create a Dog object
myAnimal.animalSound();
myPig.animalSound();
myDog.animalSound();
}
}
خروجی ما به شکل زیر خواهد بود:
The animal makes a sound
The pig says: wee wee
The dog says: bow wow
سخن پایانی
آموزش شی گرایی در سی شارپ به شما کمک میکند تا بتوانید مفاهیم کلاسها و اشیا را در این زبان بیاموزید. در بوت کمپ برنامه نویسی شما میتوانید تمامی این مفاهیم را به طور جزئیتر بیاموزید حتی مزایا و کاربردهای سی شارپ و البته امکان دسترسی به تمرین شی گرایی در سی شارپ نیز برای شما وجود دارد. در واقع در مجموعه بامداد میتوانید به چندین نمونه سوال شی گرایی در سی شارپ دسترسی پیدا کرده و از آنها برای بهبود مهارتهای خود در این زمینه استفاده کنید.


