سؤال

class Bus<T>
{
    static Bus()
    {
        foreach(FieldInfo fi in typeof(T).GetFields())
        {
            if(fi.FieldType == typeof(Argument))
            {
                fi.SetValue(typeof(T), new Argument("busyname", "busyvalue"));
            }
        }
    }
}
class Buss : Bus<Buss>
{
    public static Argument field;
}

أي أفكار كيفية جعل هذا العمل بحيث إشارة إلى حقل ثابت في بوسه بتشغيل منشئ ثابت في الحافلة?

هل كانت مفيدة؟

المحلول

ربما تعني حقيقة أن هذا الأمر يهمك أنك تستخدم أدوات إنشاء ثابتة بشكل خاطئ.

مع وضع ذلك في الاعتبار ، يمكنك إنشاء مُنشئ ثابت في رمز الترقيم العام الذي يستدعي يدويًا المُنشئ الثابت في رمز الترقيم العام.لاحظ أنه لا يمكن تشغيل مُنشئ ثابت أكثر من مرة.

نصائح أخرى

MSDN تقول أن "المنشئات الثابتة ليست موروثة '.أعتقد أن هذا مشابه للحقول الثابتة التي لا يتم توريثها أيضًا.

يتم استدعاء منشئ ثابت من نوع عام بالضبط مرة واحدة في Type, ، عندما تتم الإشارة إلى هذا النوع.

الاتصال Buss x = new Buss() سوف استدعاء منشئ ثابت من Bus<Buss>.

الاتصال Bus<Buss> x = new Bus<Buss>() سوف استدعاء أيضا منشئ ثابت من Bus<Buss>, ، ولكنها سوف تفعل ذلك لانها نوع الوسيطة Buss, ضبط Buss.field.

إذا قمت بإنشاء ملف class Bugs : Bus<Buss> فإنه سيتم تعيين أبدا Bugs.field, ، لأنها ستحل أولا وسيطة النوع Buss, ، الذي يستدعي المنشئ الثابت لفئته الأساسية Bus<Buss>, ضبط Buss.field.عندما يحاول استدعاء منشئ ثابت من Bugs الطبقة الأساسية ، وسوف تعتقد أنها قد استدعت بالفعل ثابت Bus<Buss> منشئ وتخطيه.

أساسا إذا كنت نسخ لصق التعليمات البرمجية الخاصة بك ، إنشاء دمية Argument فئة وإنشاء مثيل جديد من Buss, ، المنشئ الثابت هو الاحتجاج و Buss.field هو تعيين إلى مثيل من Argument, ، لكنني أتعرف على بعض السلوكيات الغريبة هنا والتي يجب أن أنصح فيها بعدم استخدام الانعكاس من طريقة ثابتة للوصول إلى إحصائيات الفئات الفرعية.

المثال الذي قدمته يعمل فقط للأسباب التالية Buss هي حجة النوع لنفسها.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top