9
در اینجا تفاوتها و کاربردهای هر یک را بررسی میکنیم
تعریف: سازندههای public برای مقداردهی اولیه اعضای نمونه (instance) کلاس استفاده میشوند و میتوانند پارامتر بپذیرند.
سازندههای public
فراخوانی: این سازندهها هنگام ایجاد یک شیء جدید از کلاس فراخوانی میشوند.
سازندههای static
تعریف: سازندههای static برای مقداردهی اولیه اعضای static کلاس استفاده میشوند و نمیتوانند پارامتر بپذیرند.
فراخوانی: این سازندهها تنها یک بار و قبل از دسترسی به هر عضو static کلاس، به صورت خودکار توسط CLR (Common Language Runtime) فراخوانی میشوند.
تفاوتهای کلیدی
1- فراخوانی: سازندههای public هنگام ایجاد یک شیء جدید فراخوانی میشوند، در حالی که سازندههای static تنها یک بار و به صورت خودکار توسط CLR فراخوانی میشوند.
2- پارامترها: سازندههای public میتوانند پارامتر بپذیرند، اما سازندههای static نمیتوانند.
3- هدف: سازندههای public برای مقداردهی اولیه اعضای نمونه استفاده میشوند، در حالی که سازندههای static برای مقداردهی اولیه اعضایstatic کلاس استفاده میشوند.
10
ارثبری (Inheritance) یکی از اصول مهم برنامهنویسی شیءگرا (OOP) است که به شما اجازه میدهد تا یک کلاس جدید از یک کلاس موجود ایجاد کنید. در سیشارپ، این کار با استفاده از نماد : انجام میشود. کلاس جدید که به آن کلاس مشتق (Derived Class) گفته میشود، میتواند تمام ویژگیها و متدهای کلاس پایه (Base Class) را به ارث ببرد.
11
یک مثال
class parent
{
public static int Sum(int a, int b)
{
return a + b;
}
public static int minus(int a, int b)
{
return a - b;
}
}
class child : parent
{
public static int multiple(int a, int b)
{
return a * b;
}
class Program
{
static void Main(string[] args)
{
Console.WriteLine(child.Sum(10, 8));
Console.WriteLine(child.minus(10, 8));
Console.WriteLine(child.multiple(10, 8));
Console.ReadKey();
}
}
}
12
کپسولهسازی (Encapsulation) در سیشارپ یکی از اصول مهم برنامهنویسی شیءگرا است که به معنای محصور کردن دادهها و متدها در یک کلاس و جلوگیری از دسترسی مستقیم به جزئیات پیادهسازی آنها میباشد. این کار با استفاده از مشخصههای دسترسی (Access Modifiers) مانند private، public، protected و internal انجام میشود.
مثال ساده از کپسولهسازی:
using System;
namespace EncapsulationExample
{
class Person
{
// متغیرهای خصوصی
private string name;
private int age;
// متدهای عمومی برای دسترسی به متغیرهای خصوصی
public void SetName(string newName)
{
name = newName;
}
public string GetName()
{
return name;
}
public void SetAge(int newAge)
{
if (newAge > 0)
{
age = newAge;
}
}
public int GetAge()
{
return age;
}
}
class Program
{
static void Main(string[] args)
{
Person person = new Person();
person.SetName("Ali");
person.SetAge(25);
Console.WriteLine("Name: " + person.GetName());
Console.WriteLine("Age: " + person.GetAge());
}
}
}
در این مثال، متغیرهای name و age به صورت خصوصی (private) تعریف شدهاند و فقط از طریق متدهای عمومی (public) قابل دسترسی هستند. این روش به ما کمک میکند تا کنترل بیشتری بر روی دادهها داشته باشیم و از تغییرات ناخواسته جلوگیری کنیم.
13
کپسولهسازی (Encapsulation) در سیشارپ به معنای محصور کردن دادهها و متدها در یک کلاس و جلوگیری از دسترسی مستقیم به جزئیات پیادهسازی آنها است. برای این کار از متدهای get و set استفاده میشود که به ما اجازه میدهند تا به صورت کنترلشده به متغیرهای خصوصی دسترسی داشته باشیم.
مثال از کپسولهسازی با استفاده از get و set:
using System;
namespace EncapsulationExample
{
class Person
{
// متغیر خصوصی
private string name;
// متدهای get و set برای دسترسی به متغیر خصوصی
public string Name
{
get { return name; }
//زمان فراخوانی
set { name = value; }
// زمان مقدار دهی
}
}
class Program
{
static void Main(string[] args)
{
Person person = new Person();
person.Name = "Ali"; // استفاده از set
Console.WriteLine("Name: " + person.Name); // استفاده از get
}
}
}
در این مثال، متغیر name به صورت خصوصی (private) تعریف شده است و فقط از طریق متدهای get و set قابل دسترسی است. این روش به ما کمک میکند تا کنترل بیشتری بر روی دادهها داشته باشیم و از تغییرات ناخواسته جلوگیری کنیم.
14
یک مثال دیگر کپسولهسازی (Encapsulation)
class Car
{
//public
//private
//protected
//internal
private int _speed;
public int Speed
{
get
{
return _speed;
}
set
{
if (value > 120)
{
Console.WriteLine("Bichare mimirihaaaaa ....");
_speed = 0;
}
else
{
_speed = value;
}
}
}
private string _carName = "Pride";
public string CarName
{
get // get فقط خواندی هست و نمی توانید مقدار دهید
{
return _carName;
}
}
}
و در کلاس Program
class Program
{
static void Main(string[] args)
{
Car pride = new Car();
pride.Speed = 120;
//pride.CarName = "Peykan";
// get فقط خواندی هست و نمی توانید مقدار دهید
Console.WriteLine($"Car Name Is : {pride.CarName}");
Console.WriteLine($"Speed Is {pride.Speed}");
Console.ReadKey();
}
15
در سی شارپ، Property یا ویژگی، عضوی از یک کلاس است که برای تنظیم و دریافت دادهها از یک فیلد داده (یعنی متغیر) استفاده میشود. Properties به ما این امکان را میدهند که به شیوهای کنترلشده به فیلدهای کلاس دسترسی پیدا کنیم و از دسترسی نامناسب به آنها جلوگیری کنیم.
ساختار یک Property در سی شارپ شامل دو بخش اصلی است: get و set. بخش get برای بازیابی مقدار Property و بخش set برای تنظیم مقدار آن استفاده میشود.
16
در سی شارپ، GenericList یا به طور دقیقتر List<T>، یک مجموعه عمومی (generic) است که میتواند انواع مختلف دادهها را ذخیره کند. این نوع لیست در فضای نام System.Collections.Generic قرار دارد و به شما اجازه میدهد تا مجموعهای از اشیاء را به صورت نوع مشخص ذخیره کنید.
ویژگیهای List<T>:- نوع عمومی: List<T> میتواند حاوی عناصری از نوع مشخص باشد و چک کردن نوع در زمان کامپایل را فراهم میکند.
- دسترسی با ایندکس: میتوانید به عناصر لیست با استفاده از ایندکس دسترسی داشته باشید، مانند myList[0].
- افزودن و حذف عناصر: میتوانید از متدهای Add(), AddRange(), Insert(), Remove(), و RemoveAt() برای مدیریت عناصر لیست استفاده کنید.
- پشتیبانی از LINQ: List<T> از پرس و جوهای LINQ پشتیبانی میکند که به شما اجازه میدهد تا به راحتی دادهها را جستجو و فیلتر کنید.
مثال:
// ایجاد یک لیست از اعداد صحیح
List<int> primeNumbers = new List<int> { 2, 3, 5, 7, 11 };
// افزودن یک عنصر به لیست
primeNumbers.Add(13);
// دسترسی به یک عنصر با استفاده از ایندکس
int firstPrime = primeNumbers[0]; // خروجی: 2
// حذف یک عنصر از لیست
primeNumbers.Remove(5);
//حذف یک ایندکس آرایه
primeNumbers.RemoveAt(0);
// استفاده از LINQ برای فیلتر کردن عناصر
var evenNumbers = primeNumbers.Where(n => n % 2 == 0).ToList();
این مثال نشان میدهد که چگونه میتوانید یک لیست ایجاد کنید، عناصر را به آن اضافه کنید، به عناصر دسترسی پیدا کنید، و از LINQ برای فیلتر کردن دادهها استفاده کنید.
17
مثال دیگر در GenericList
List<string> Names = new List<string>();
Names.Add("Iman");
Names.Add("TopLearn");
Names.Add("Barnamenevisan");
Names.Add("Ali");
Names.Add("themeShop");
foreach (string name in Names)
{
Console.WriteLine($"Name Is : {name}");
}
Console.ReadKey();
18
در زبان برنامهنویسی سی شارپ، اینترفیس (Interface) یک قرارداد است که تعیین میکند یک کلاس باید چه ویژگیها و روشهایی را پیادهسازی کند. اینترفیسها شامل متدها، ویژگیها و رویدادها هستند که فقط اعلان میشوند و پیادهسازی آنها بر عهده کلاسهای مشتق شده است.
برای تعریف یک اینترفیس از کلمه کلیدی interface استفاده میشود. به عنوان مثال:
public interface ITransactions
{
void ShowTransaction();
double GetAmount();
}
و برای پیادهسازی اینترفیس در یک کلاس:
public class Transaction : ITransactions
{
private string tCode;
private string date;
private double amount;
public Transaction(string c, string d, double a)
{
tCode = c;
date = d;
amount = a;
}
public double GetAmount()
{
return amount;
}
public void ShowTransaction()
{
Console.WriteLine($"Transaction: {tCode}");
Console.WriteLine($"Date: {date}");
Console.WriteLine($"Amount: {GetAmount()}");
}
}
این مثال نشان میدهد که چگونه یک کلاس میتواند از یک اینترفیس ارثبری کند و متدهای آن را پیادهسازی کند.
19
تفاوتهای اصلی بین اینترفیس و کلاس در سی شارپ به شرح زیر است:
1- تعریف و پیادهسازی:
- اینترفیس: فقط شامل اعلان متدها، ویژگیها و رویدادها است و پیادهسازی آنها بر عهده کلاسهایی است که از اینترفیس ارثبری میکنند.
- کلاس: شامل اعلان و پیادهسازی متدها، ویژگیها و رویدادها است.
2- ارثبری:
- اینترفیس: یک کلاس میتواند از چندین اینترفیس ارثبری کند که به آن چندگانهارثبری میگویند.
- کلاس: یک کلاس فقط میتواند از یک کلاس دیگر ارثبری کند (ارثبری تکگانه).
3- ایجاد شیء:
- اینترفیس: نمیتوان از اینترفیسها شیء ایجاد کرد.
- کلاس: میتوان از کلاسها شیء ایجاد کرد.
4- دسترسی به اعضا:
- اینترفیس: اعضای اینترفیس به صورت پیشفرض عمومی (public) هستند و نمیتوانند شامل فیلدهای خصوصی یا محافظتشده باشند.
- کلاس: اعضای کلاس میتوانند دارای سطوح دسترسی مختلفی مانند خصوصی (private)، محافظتشده (protected) و عمومی (public) باشند.
به عنوان مثال، در کد زیر یک اینترفیس و یک کلاس را مشاهده میکنید:
public interface IExample
{
void MethodA();
}
public class ExampleClass : IExample
{
public void MethodA()
{
Console.WriteLine("MethodA implementation");
}
}
در این مثال، ExampleClass از اینترفیس IExample ارثبری کرده و متد MethodA را پیادهسازی کرده است.