متى تستخدم struct بدلاً من class في C#: نفهم أنواع القيم والأنواع المرجعية
```html
مرحباً بالجميع! أنا أكتب بلغة C# منذ حوالي عام، وسؤال يطاردني باستمرار: متى يجب استخدام struct ومتى class؟ يبدو أنني أفهم الفرق — struct هو نوع قيمة (value type) وclass هو نوع مرجعي (reference type). لكن عملياً، أجد نفسي كثيراً في حيرة.
على سبيل المثال، لدي هذا الكود:
```csharp
public class PointClass
{
public int X { get; set; }
public int Y { get; set; }
public PointClass(int x, int y) { X = x; Y = y; }
}
public struct PointStruct
{
public int X { get; set; }
public int Y { get; set; }
public PointStruct(int x, int y) { X = x; Y = y; }
}
```
يبدو أن كليهما يفعلان نفس الشيء. لكنني قرأت أن struct أسرع للكائنات الصغيرة، لأنها تُخزن في المكدس (stack)، بينما class يُخزن في الكومة (heap). ومن ناحية أخرى، سمعت أنه لا يُنصح باستخدام struct مع المجموعات (collections) أو LINQ أو البرمجة غير المتزامنة (async)، لأنها تبدأ في النسخ من هنا إلى هناك، مما يقلل الأداء.
كما أنني لا أفهم لماذا لا يمكن تعريف مُنشئ بدون معاملات (parameterless constructor) في struct.
```