در حال بارگذاری...

مرجع انواع داده‌ها

مرجع انواع داده‌ها در سی‌شارپ یک جزء حیاتی برای توسعه برنامه‌های بهینه و امن است. این مرجع تعیین می‌کند که چگونه داده‌ها در حافظه ذخیره، مدیریت و دستکاری می‌شوند. در سی‌شارپ، انواع داده به دو دسته اصلی تقسیم می‌شوند: انواع مقدار (Value Types) و انواع مرجع (Reference Types). انواع مقدار مانند int، double و bool داده‌ها را مستقیماً در Stack ذخیره می‌کنند، در حالی که انواع مرجع مانند string، آرایه‌ها و کلاس‌ها، تنها ارجاع به موقعیت داده‌ها در Heap را نگه می‌دارند. درک این تفاوت برای جلوگیری از نشت حافظه، بهینه‌سازی عملکرد و طراحی سیستم‌های مقیاس‌پذیر اهمیت بالایی دارد.
در توسعه پیشرفته سی‌شارپ، انواع مرجع در مواقعی استفاده می‌شوند که نیاز به مدیریت داده‌های پویا، اشتراک‌گذاری داده‌ها بین بخش‌های مختلف برنامه و استفاده از اشیاء قابل تغییر باشد. این مرجع به توسعه‌دهندگان امکان می‌دهد تا از ساختارهای داده‌ای مانند List، Dictionary\، آرایه‌های چندبعدی و Nullable استفاده کنند. همچنین، مفاهیم پیشرفته OOP، الگوریتم‌ها و LINQ با انواع مرجع ترکیب شده و کارایی و قابلیت نگهداری کد را افزایش می‌دهند. مطالعه این مرجع، مهارت‌های برنامه‌نویسی شما را در مدیریت داده‌ها، طراحی شیء‌گرا و ساخت سیستم‌های نرم‌افزاری پیشرفته تقویت می‌کند و پایه‌ای محکم برای توسعه پروژه‌های سازمانی فراهم می‌آورد.

مثال پایه

text
TEXT Code
using 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 تنها ارجاع به داده‌ها در Heap دارند، که امکان اشتراک و تغییر داده‌ها را فراهم می‌کند. استفاده از Nullable به متغیرها اجازه می‌دهد مقدار null بگیرند، که در ارتباط با پایگاه داده یا APIها مفید است. همچنین، استفاده از List و string.Join عملیات روی مجموعه‌ها را ساده و خوانا می‌کند. رعایت استانداردهای سی‌شارپ و مدیریت صحیح حافظه در این مثال نشان داده شده است تا از نشت حافظه و خطاهای رایج جلوگیری شود.

مثال کاربردی

text
TEXT Code
using 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

text
TEXT Code
using 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 و Dictionary\ به شکل مناسب استفاده شود و اعتبارسنجی داده‌ها انجام شود تا از خطاها و آسیب‌پذیری‌ها جلوگیری گردد. رعایت این نکات منجر به توسعه برنامه‌های سی‌شارپ قوی، مقیاس‌پذیر و ایمن خواهد شد.

📊 مرجع کامل

سی‌شارپ 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.

3
سوالات
🎯
70%
برای قبولی
♾️
زمان
🔄
تلاش‌ها

📝 دستورالعمل‌ها

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