TGViewer
Software Philosophy Software Philosophy @softwarephilosophy · 3.48K subscribers
Post #2343 1.32K
ساختارها در سی‌شارپ

#csharp_for_beginners

ساختار یا struct نوعی value type در زبان سی‌شارپ است که برای نگهداری داده‌ها و رفتار مرتبط با آن‌ها استفاده می‌شود.
وقتی متغیری از نوع struct ساخته می‌شود، داده‌ها مستقیماً درون آن متغیر ذخیره می‌شوند، نه در یک شیء جداگانه در heap.
در نتیجه، وقتی یک struct به متد ارسال یا از متد بازگردانده می‌شود، کل مقدار آن کپی می‌گردد.
به همین دلیل، struct برای انواع داده‌ای کوچک و مستقل مناسب است.
در مقابل، اگر نوعی داده رفتار پیچیده یا اندازه‌ی بزرگ دارد، معمولاً کلاس گزینه‌ی بهتری است.

مثال ساده از تعریف ساختار

public struct Coords
{
public Coords(double x, double y)
{
X = x
Y = y
}

public double X { get }
public double Y { get }

public override string ToString() => $"({X}, {Y})"
}



یک نوع دیگر به نام readonly struct & readonly

می‌توان یک ساختار را با کلیدواژه readonly تعریف کرد تا تغییرناپذیر باشد.
در یک readonly struct تمام فیلدها باید readonly باشند و تمام ویژگی‌ها (properties) باید فقط getter داشته باشند یا از نوع init باشند. در این حالت ساختار دیگر قابل تغییر نیست و اطمینان حاصل می‌شود که داده‌ها پس از ساخت ثابت باقی می‌مانند.

همچنین می‌توان متدهای خاصی را با کلیدواژه readonly مشخص کرد تا نشان دهد که این متدها وضعیت ساختار را تغییر نمی‌دهند. اگر چنین متدی درون ساختار فراخوانی شود، کامپایلر از تغییر وضعیت جلوگیری می‌کند و در صورت نیاز، یک کپی موقت از ساختار ایجاد می‌کند.

مثال از readonly struct

public readonly struct Coords
{
public Coords(double x, double y)
{
X = x
Y = y
}

public double X { get; init; }
public double Y { get; init; }

public readonly override string ToString() => $"({X}, {Y})"
}


آرایه‌های درون‌خطی (inline arrays)

از نسخه‌ی سی‌شارپ ۱۲ به بعد، امکان تعریف آرایه‌های درون‌خطی در قالب struct فراهم شده است. در این نوع ساختار، فقط یک فیلد داخلی وجود دارد که شامل یک بلوک پیوسته از عناصر داده است. این ویژگی برای موقعیت‌هایی که نیاز به سرعت بالا و دسترسی سریع به حافظه وجود دارد مفید است.

مقداردهی اولیه و مقدار پیش‌فرض struct

ساختارها مستقیماً داده‌ها را درون خود ذخیره می‌کنند. هنگامی که از دستور default برای ساختار استفاده شود، همه‌ی فیلدها با مقدار پیش‌فرض خود مقداردهی می‌شوند و هیچ سازنده‌ای فراخوانی نمی‌شود.

اگر برای ساختار سازنده‌ی بدون پارامتر تعریف شود، باز هم دستور default آن را فراخوانی نمی‌کند و مقدار پیش‌فرض برای هر فیلد اعمال می‌شود.
از سی‌شارپ ۱۱ به بعد اگر سازنده مقداری برای فیلدها تعیین نکند، کامپایلر به صورت خودکار آن‌ها را با مقدار پیش‌فرض مقداردهی می‌کند.

همچنین می‌توان بدون استفاده از new یک متغیر از نوع ساختار تعریف کرد، اما در این صورت تمام فیلدهای آن باید پیش از استفاده مقداردهی شوند.



🔗 مطلب کامل را در این لینک می‌توانید مطالعه کنید.

⁉️ برای بحث و تبادل نظر فنی در مورد این پست، نظرات خود را با ما در قسمت کامنت‌ها به اشتراک بگذارید.

کانال تلگرام:
@SoftwarePhilosophy

______
Docs Structure types - C# reference Structure types (struct) give C# lightweight, data-centric value types. See how value semantics, copying, and boxing work, and when to choose a class instead.
  • 👍 5
More from @softwarephilosophy
  1. Sep 27, 2026نگو JEV بگو System One! دنیل کانمن (Daniel Kahneman) توی کتاب معروفش «تفکر، سریع و کند» (T…
  2. Sep 23, 2026بازنویسی کل GitHub Copilot Runtime با Rust 🔶 حدود ۱۲۰،۰۰۰ دلار هزینه توکن و سه هفته وقت ی…
  3. Sep 15, 2026ورک‌شاپ «AI Agents in C# (MAF)» در این ورک‌شاپ به بررسی امکانات جدید برنامه‌نویسی با کتابخ…
  4. Sep 12, 2026کد مدریت شده (Managed Code) در دات‌نت یعنی چی؟ ▫️به زبان ساده: کد مدریت شده (Managed Code)…
  5. Sep 5, 2026آشنایی با Attributeها در سی‌شارپ در سی شارپ، Attributeها برای اضافه کردن metadata یا اطلاع…
  6. Aug 25, 2026اگر در دات نت Agent، MCP Server یا ابزارهای مبتنی بر هوش مصنوعی توسعه میدهی، این پروژه میت…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →