مرجع انواع دادهها
مرجع انواع دادهها در سیشارپ یک جزء حیاتی برای توسعه برنامههای بهینه و امن است. این مرجع تعیین میکند که چگونه دادهها در حافظه ذخیره، مدیریت و دستکاری میشوند. در سیشارپ، انواع داده به دو دسته اصلی تقسیم میشوند: انواع مقدار (Value Types) و انواع مرجع (Reference Types). انواع مقدار مانند int، double و bool دادهها را مستقیماً در Stack ذخیره میکنند، در حالی که انواع مرجع مانند string، آرایهها و کلاسها، تنها ارجاع به موقعیت دادهها در Heap را نگه میدارند. درک این تفاوت برای جلوگیری از نشت حافظه، بهینهسازی عملکرد و طراحی سیستمهای مقیاسپذیر اهمیت بالایی دارد.
در توسعه پیشرفته سیشارپ، انواع مرجع در مواقعی استفاده میشوند که نیاز به مدیریت دادههای پویا، اشتراکگذاری دادهها بین بخشهای مختلف برنامه و استفاده از اشیاء قابل تغییر باشد. این مرجع به توسعهدهندگان امکان میدهد تا از ساختارهای دادهای مانند List
مثال پایه
textusing System;
using System.Collections.Generic;
namespace ReferenceTypesExample
{
class Program
{
static void Main(string\[] args)
{
// انواع مقدار
int number = 42;
double price = 99.99;
bool isActive = true;
// انواع مرجع
string name = "برنامهنویس سیشارپ";
int[] scores = new int[] { 85, 90, 95 };
List<string> skills = new List<string> { "OOP", "LINQ", "Async" };
// نوع Nullable
int? nullableNumber = null;
// خروجی
Console.WriteLine($"Number: {number}, Price: {price}, Active: {isActive}");
Console.WriteLine($"Name: {name}");
Console.WriteLine("Scores: " + string.Join(", ", scores));
Console.WriteLine("Skills: " + string.Join(", ", skills));
Console.WriteLine($"Nullable Value: {nullableNumber?.ToString() ?? "No Value"}");
}
}
}
در این مثال، تفاوت انواع مقدار و مرجع به وضوح نشان داده شده است. انواع مقدار مانند int و double دادهها را مستقیماً در Stack ذخیره میکنند و هنگام تخصیص به متغیر جدید، دادهها کپی میشوند. انواع مرجع مانند string، آرایهها و List
مثال کاربردی
textusing System;
using System.Collections.Generic;
namespace PracticalReferenceExample
{
class Employee
{
public string Name { get; set; }
public int Age { get; set; }
public decimal Salary { get; set; }
}
class Program
{
static void Main()
{
List<Employee> employees = new List<Employee>
{
new Employee { Name = "Ali", Age = 30, Salary = 60000 },
new Employee { Name = "Sara", Age = 45, Salary = 80000 },
new Employee { Name = "Reza", Age = 25, Salary = 50000 }
};
// مرتبسازی بر اساس حقوق
employees.Sort((e1, e2) => e1.Salary.CompareTo(e2.Salary));
foreach (var e in employees)
{
Console.WriteLine($"Name: {e.Name}, Age: {e.Age}, Salary: {e.Salary:C}");
}
}
}
}
Advanced سیشارپ Implementation
textusing System;
using System.Collections.Generic;
using System.Linq;
namespace AdvancedReferenceExample
{
class Employee
{
public string Name { get; set; }
public int Age { get; set; }
public decimal Salary { get; set; }
public Employee(string name, int age, decimal salary)
{
Name = name;
Age = age;
Salary = salary;
}
}
class Program
{
static void Main()
{
List<Employee> employees = new List<Employee>
{
new Employee("Ali", 30, 60000),
new Employee("Sara", 45, 80000),
new Employee("Reza", 25, 50000),
new Employee("Neda", 35, 70000)
};
try
{
var highSalaries = employees.Where(e => e.Salary > 60000)
.OrderByDescending(e => e.Salary)
.ToList();
foreach (var e in highSalaries)
{
Console.WriteLine($"High Salary: {e.Name}, Salary: {e.Salary:C}");
}
}
catch (Exception ex)
{
Console.WriteLine($"Error: {ex.Message}");
}
}
}
}
بهترین شیوهها در استفاده از انواع مرجع در سیشارپ شامل انتخاب صحیح بین انواع مقدار و مرجع، مدیریت بهینه حافظه و نوشتن کد خوانا و قابل نگهداری است. انواع مقدار برای دادههای کوچک و غیرقابل تغییر مناسب هستند، در حالی که انواع مرجع برای اشیاء پیچیده و دادههای مشترک ضروریاند. استفاده از مجموعههای جنریک، LINQ و Nullable باعث افزایش امنیت و بهبود عملکرد میشود. توصیه میشود ایجاد اشیاء داخل حلقهها محدود شود، از List
📊 مرجع کامل
سیشارپ Element/Method | Description | Syntax | Example | Notes |
---|---|---|---|---|
int | عدد صحیح 32 بیتی | int x = 10; | int number = 100; | نوع مقدار استاندارد |
double | عدد اعشاری | double d = 3.14; | double price = 19.99; | دقت بالا |
bool | مقدار منطقی | bool flag = true; | bool active = false; | true/false |
char | کاراکتر تک | char c = 'A'; | char letter = 'B'; | یک کاراکتر |
string | متن | string s = "Text"; | string name = "Ali"; | نوع مرجع غیرقابل تغییر |
object | پایه تمام نوعها | object obj = 123; | object data = "Hello"; | میتواند هر نوع را ذخیره کند |
decimal | عدد اعشاری دقیق | decimal value = 100.50m; | decimal salary = 1500.75m; | کاربرد مالی |
float | عدد اعشاری ساده | float f = 1.23f; | float rate = 0.05f; | دقت کمتر |
long | عدد صحیح 64 بیتی | long l = 1234567890L; | long distance = 5000000000L; | برای اعداد بزرگ |
short | عدد صحیح 16 بیتی | short s = 32000; | short temp = 150; | صرفهجویی حافظه |
byte | عدد صحیح 8 بیتی | byte b = 255; | byte age = 25; | حجم کم |
sbyte | عدد صحیح 8 بیتی با علامت | sbyte sb = -128; | sbyte offset = -50; | محدوده کوچک |
uint | عدد صحیح بدون علامت 32 بیتی | uint u = 4000; | uint counter = 1000; | فقط مثبت |
ulong | عدد صحیح بدون علامت 64 بیتی | ulong ul = 100000; | ulong largeValue = 1000000; | فقط مثبت |
ushort | عدد صحیح بدون علامت 16 بیتی | ushort us = 60000; | ushort height = 55000; | فقط مثبت |
int? | عدد صحیح Nullable | int? x = null; | int? result = null; | میتواند null باشد |
List<T> | لیست جنریک | List<int> numbers = new List<int>(); | List<string> names = new List<string>(); | مجموعه پویا |
Dictionary\<K,V> | کلید-مقدار | Dictionary\<string,int> dict = new Dictionary\<string,int>(); | Dictionary\<string,string> states = new Dictionary\<string,string>(); | دسترسی سریع به داده |
Array | آرایه ثابت | int\[] arr = new int\[5]; | string\[] fruits = { "Apple", "Banana" }; | دسترسی با اندیس |
Tuple | تاپل غیرقابل تغییر | var tuple = Tuple.Create(1,"A"); | var person = Tuple.Create("Ali",25); | گروه داده موقت |
var | استنتاج نوع | var x = 10; | var sum = 100; | نوع توسط کامپایلر مشخص میشود |
dynamic | نوع پویا | dynamic obj = 1; | dynamic value = "Hello"; | بررسی نوع در زمان اجرا |
📊 Complete سیشارپ Properties Reference
Property | Values | Default | Description | سیشارپ Support |
---|---|---|---|---|
Length | int | 0 | اندازه آرایه یا رشته | C# 1.0+ |
Count | int | 0 | تعداد عناصر در مجموعه | C# 2.0+ |
Capacity | int | 0 | ظرفیت مجموعه | C# 2.0+ |
Item | T | null | دسترسی به عناصر با اندیس | C# 2.0+ |
HasValue | bool | false | بررسی Nullable | C# 2.0+ |
Value | T | N/A | دسترسی به مقدار Nullable | C# 2.0+ |
Keys | ICollection | N/A | کلیدهای Dictionary | C# 2.0+ |
Values | ICollection | N/A | مقادیر Dictionary | C# 2.0+ |
First | T | default | اولین عنصر LINQ | C# 3.0+ |
Last | T | default | آخرین عنصر LINQ | C# 3.0+ |
ItemArray | object\[] | null | دسترسی به آرایه DataRow | C# 2.0+ |
مطالعه مرجع انواع دادهها در سیشارپ مهارت توسعهدهنده را در مدیریت حافظه، بهینه
سازی عملکرد و طراحی سیستمهای مقیاسپذیر تقویت میکند. با درک تفاوت بین انواع مقدار و مرجع، استفاده از Nullable، مجموعههای جنریک و LINQ، برنامهنویس قادر خواهد بود برنامههای امن و قابل نگهداری ایجاد کند. مرحله بعدی شامل یادگیری الگوریتمهای پیشرفته، الگوهای طراحی، برنامهنویسی همزمان و ارتباط با پایگاه داده است. منابع آنلاین و مستندات مایکروسافت برای ادامه یادگیری توصیه میشوند.
🧠 دانش خود را بیازمایید
Test Your Knowledge
Test your understanding of this topic with practical questions.
📝 دستورالعملها
- هر سوال را با دقت بخوانید
- بهترین پاسخ را برای هر سوال انتخاب کنید
- میتوانید آزمون را هر چند بار که میخواهید تکرار کنید
- پیشرفت شما در بالا نمایش داده میشود