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 را پیادهسازی کرده است.
20
یک مثال
اینترفیس
namespace ConsoleApp5
{
internal interface IMyInterface
{
string HelloUser(string name);
}
}
کلاس Person
namespace ConsoleApp5
{
class Person:IMyInterface
{
public string HelloUser(string name)
{
return "Hello " + name;
}
}
}
و کلاس Program
namespace ConsoleApp5
{
class Program
{
static void Main(string[] args)
{
Person hi = new Person();
Console.WriteLine(hi.HelloUser("alireza panahi"));
Console.ReadKey();
}
}
}
21
در اینجا می توانیم اینترفیس interface را انتخاب کرد