سؤال

قسمين إلى هذا:

  1. إذا فئة ثابتة يمكن أن يكون منشئ ثابت, لماذا لا يمكن أن يكون ثابت المدمر?

  2. ما هو أفضل الحل?لدي ثابت الدرجة التي تدير مجموعة من الاتصالات التي هي كائنات COM, وأنا بحاجة للتأكد من صلاتهم الحصول مغلقة/صدر إذا كان هناك شيء ينفجر في أي مكان آخر في البرنامج.

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

المحلول

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

على سبيل المثال, إذا كان لديك الآن:

static class MyClass
{
    public static void MyMethod() {...}
}

//Using the class:
MyClass.MyMethod();

كنت قد بدلا من ذلك:

class MyClass : IDisposable
{
    public static MyClass()
    {
        Instance=new MyClass();
    }

    public static MyClass Instance {get; private set;}

    public void MyMethod() {...}

    public void Dispose()
    {
        //...
    }

    ~MyClass()
    {
        //Your destructor goes here
    }
}

//Using the class:
MyClass.Instance.MyMethod();

(لاحظ كيف يتم إنشاء مثيل في منشئ ثابت ، وهو الاحتجاج به أول مرة أي من الدرجة ثابت الأعضاء المشار إليها)

نصائح أخرى

  1. فئات ثابتة لا destructors لأن فئة ثابتة لم يحصل تدميرها.

  2. إذا كنت ترغب في إنشاء وتدمير مثيلات متعددة من ذلك ، فإنه لا يجب أن تكون ثابتة.تجعل فئة كاملة.

  3. المتلفات لا ينبغي أن تستخدم لهذا الغرض على أي حال.استخدام IDisposable / التصرف.

1.لماذا ؟ -- نوع لا يمكن أن يكون منشئ في حد ذاته كما في كيف نفكر عادة المنشئات على الحالات.في عام انها تعرف أحيانا باسم "ثابت مهيئ" الطريقة ولكن مايكروسوفت يستخدم مصطلحات من نوع "منشئ" (ولها قيود خاصة) - يمكنك وضع كود في ذلك إلى التهيئة نوع/فئة - إذا كان مثيل منشئ يمكن أن يكون فوق طاقتها.هذا ثابت قيود على "نوع منشئ" لأن .NET CLR هو المسؤول عن تحميل قالب فئة على كومة و لا تسمح معايير محددة تحت هذا الظرف (إذ كيف كنت من أي وقت مضى تمرير الوسائط).لأنه في المعنى الضيق مبرمج ليست مسؤولة عن التسبب في نوع منشئ أن الاستناد إلى أنه لن يكون من المنطقي أن تسمح مبرمج رمز ثابت المدمر عندما يكون أكثر في CLR هذا المجال.CLR في نهاية المطاف إزالة قالب فئة من الكومة ، لكن فئة القالب عمر أطول من الحالات, إذا كنت لا تريد أن تفعل أي شيء من الموارد المكثفة في ذلك على أي حال (مثلا ، عقد فتح اتصال db).

2.ماذا ؟ - المفرد إذا كنت تقوم بتشغيل في ظرف حيث كنت تشعر بأنك بحاجة إلى فتح الموارد على فئة القالب و تدميره بعد ذلك ، قد تنظر في المفرد البرامج نمط أن حالة واحدة فقط من تلك الفئة وربما أيضا تنفيذ النظام.IDiposable واجهة للمساعدة في تنظيف, بالإضافة إلى المدمر.(أرى شخص ما لديه بالفعل ضرب لي IDisposable نموذج التعليمات البرمجية الأولى لذا سوف ينتهي بي الحل هنا)

فئة ثابتة أبدا تدميرها.إنه تم إنهاء جنبا إلى جنب مع البرنامج.هل يمكن استخدام نمط المفرد كما implemenation بدلا من استخدام فئة ثابتة

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