ویرگول
ورودثبت نام
سید عمید قائم مقامی
سید عمید قائم مقامیبرنامه نویسی سیستم ویندوز و مهندسی معکوس و علاقه مند به آموزش.
سید عمید قائم مقامی
سید عمید قائم مقامی
خواندن ۲ دقیقه·۱ روز پیش

انواع بی نام در سی شارپ یا Anonymous Type

نوع بی‌نام یعنی یک شیء بسازی بدون این‌که کلاس براش تعریف کنی.

یعنی به‌جای این:

class Person { public string Name { get; set; } public int Age { get; set; } }

می‌نویسیم :

var person = new { Name = "Ali", Age = 30 };
  • کلاسی وجود نداره

  • اسم نوع رو خود کامپایلر پشت‌صحنه می‌سازه

  • فقط همون‌جا قابل استفاده است

ویژگی‌های اصلی Anonymous Type

1️⃣ فقط با var ساخته میشه

نمی‌تونی این‌طوری بنویسی:

Person p = new { Name = "Ali", Age = 30 }; // ❌

باید:

var p = new { Name = "Ali", Age = 30 }; // ✅

2️⃣ پراپرتی‌ها Read-Only هستن

var user = new { Name = "Sara", Age = 25 }; user.Age = 30; // ❌ خطای کامپایل

چون:

  • فقط getter دارن

  • setter ندارن

3️ فقط در همان Scope معتبرند

Anonymous Type رو:

  • نمی‌تونی ریترن کنی (مستقیم)

  • نمی‌تونی پارامتر متد کنی

  • نمی‌تونی فیلد کلاس کنی

مثلاً این اشتباهه:

public ??? GetUser() { return new { Name = "Ali", Age = 30 }; }

🔹 کاربرد اصلی: LINQ

بیشترین استفاده از Anonymous Type توی LINQ هست 👇

var result = people .Where(p => p.Age > 18) .Select(p => new { p.Name, p.Age });

اینجا:

  • نمی‌خوای کلاس جدید بسازی

  • فقط خروجی موقت لازم داری

  • کدت خیلی تمیزتر میشه

🔹 مقایسه Anonymous Type ها

دو Anonymous Type فقط وقتی برابرند که:

  • ترتیب پراپرتی‌ها

  • اسم پراپرتی‌ها

  • نوع پراپرتی‌ها

دقیقاً یکسان باشه:

var a = new { Name = "Ali", Age = 30 }; var b = new { Name = "Reza", Age = 40 }; bool equal = a.GetType() == b.GetType(); // ✅ true

اما این:

var c = new { Age = 30, Name = "Ali" }; a.GetType() == c.GetType(); // ❌ false (ترتیب فرق دارد)

🔹 محدودیت‌های مهم

❌ نمی‌تونی ازش ارث‌بری کنی

❌ نمی‌تونی اینترفیس پیاده‌سازی کنی

❌ نمی‌تونی public کنی

❌ برای داده‌های ماندگار مناسب نیست

🔹 چه زمانی استفاده کنیم؟

✅ وقتی داده موقتیه

✅ خروجی LINQ

✅ ساخت ViewModel موقت

✅ کاهش کلاس‌های اضافه

❌ وقتی داده قراره بین لایه‌ها جابه‌جا بشه

❌ وقتی API یا متد عمومی داری

Telegram: @CaKeegan
Gmail : amidgm2020@gmail.com

سی‌شارپ
۱
۰
سید عمید قائم مقامی
سید عمید قائم مقامی
برنامه نویسی سیستم ویندوز و مهندسی معکوس و علاقه مند به آموزش.
شاید از این پست‌ها خوشتان بیاید