[C#] إخفاء المنشئ بارامترليس على الهيكل


Answers

لا يمكن إخفاء ذلك. لا يمكن للهيكل إعادة تعريف صفر المنشئ أر، وبالتالي فإن الرؤية لا يمكن إعادة تعريفها.

Question

هل من الممكن إخفاء منشئ بارامترليس من مستخدم في c #

أريد إجبارهم على استخدام دائما منشئ مع المعلمات

على سبيل المثال هذه الفئة الموقف

public struct Position
{
    private readonly int _xposn;
    private readonly int _yposn;

    public int Xposn
    {
        get { return _xposn; }
    }

    public int Yposn
    {
        get { return _yposn; }
    }

    public Position(int xposn, int yposn)
    {
        _xposn = xposn;
        _yposn = yposn;
    }        
}

أريد فقط للمستخدمين لتكون قادرة على جديد حتى موقف عن طريق تحديد x و y الإحداثيات

ومع ذلك، منشئ المعلمة هو دائما أفايليابل

لا أستطيع جعله خاصا. أو حتى تعريفه على أنه عام

لقد قرأت هذا لماذا لا يمكنني تحديد منشئ افتراضي لهيكل في .NET؟

ولكن لا يساعد حقا

إذا كان هذا غير ممكن - ما هي أفضل طريقة للكشف إذا كان الموقف أنا يتم تمرير له قيم؟

إكسليسيتي التحقق من كل حقل الممتلكات؟ هل هناك طريقة أسرع؟

شكر




لا يمكنك إنشاء بنية مع منشئ خاص أقل معلمة أو حتى تعلن منشئ أقل معلمة. سيكون عليك تغييره إلى فصل. لا تسمح الهياكل لإعلان منشئ بارامتريليس.

من البرنامج التعليمي ستروكتس على مسن:

يمكن للهيكلات أن تعلن منشئات البناء، ولكن يجب أن تأخذ المعلمات. إنه خطأ للإعلان عن منشئ افتراضي (باراميترليس) لهيكل. لا يمكن أن يكون لدى أعضاء الهيكل إعدادات أولية. يتم توفير منشئ افتراضي دائما لتكوين أعضاء الهيكل إلى قيمهم الافتراضية.

من مواصفات C # على مسن:

11.3 الفروقات بين الفصول والمنشآت

تختلف الهياكل عن الطبقات بعدة طرق مهمة:

  • الهياكل هي أنواع القيمة (القسم 11.3.1).
  • جميع أنواع الهيكل ترث ضمنيا من فئة System.ValueType (القسم 11.3.2). التخصيص إلى متغير من نوع هيكلي يخلق نسخة من القيمة التي تم تعيينها (القسم 11.3.3).
  • القيمة الافتراضية للهيكل هي القيمة التي تنتجها تعيين كافة حقول نوع القيمة إلى القيمة الافتراضية وجميع حقول نوع المرجع إلى فارغة (القسم 11.3.4). يتم استخدام عمليات الملاكمة و أونبوكسينغ لتحويل بين نوع الهيكل والهدف (القسم 11.3.5).
  • معنى هذا يختلف عن الهياكل (القسم 11.3.6).
  • لا يسمح بإعلانات حقل المثيل لهيكل تضمين المتغيرات المتغيرة (القسم 11.3.7).
  • لا يسمح للهيكل أن يعلن منشئ مثيل بدون معلمات (القسم 11.3.8).
  • لا يسمح للهيكل أن يعلن ديستروكتور (القسم 11.3.9).