سؤال

أنا أبحث في بعض التعليمات البرمجية ولها هذا البيان:

~ConnectionManager()
{
    Dispose(false);
}

يقوم الفصل بتنفيذ IDisposable الواجهة، لكنني لا أعرف ما إذا كان هذا جزءًا من استخدام التلدة (~) من أجلها.

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

المحلول

~ هو المدمر

  1. يتم استدعاء أدوات التدمير تلقائيًا، ولا يمكن استدعاؤها بشكل صريح.
  2. لا يمكن تحميل المدمرات بشكل زائد.وبالتالي، يمكن أن تحتوي الفئة على مدمر واحد على الأكثر.
  3. لا يتم توريث المدمرات.وبالتالي، لا تحتوي الفئة على أدوات تدميرية غير تلك التي يمكن الإعلان عنها فيها.
  4. لا يمكن استخدام المدمرات مع الهياكل.يتم استخدامها فقط مع الفصول الدراسية.يصبح المثيل مؤهلاً للتدمير عندما لا يكون من الممكن لأي رمز استخدام المثيل.
  5. قد يتم تنفيذ أداة التدمير للمثيل في أي وقت بعد أن يصبح المثيل مؤهلاً للتدمير.
  6. عندما يتم إتلاف مثيل ما، يتم استدعاء المدمرين في سلسلة الميراث الخاصة به، بالترتيب، من الأكثر اشتقاقًا إلى الأقل اشتقاقًا.

وضع اللمسات الأخيرة

في لغة C#، تقوم طريقة Finalize بتنفيذ العمليات التي يقوم بها مدمر C++ القياسي.في C#، لا يمكنك تسميتها Finalize - بل تستخدم بناء جملة C++ destructor لوضع رمز التلدة ( ~ ) قبل اسم الفئة.

تخلص

من الأفضل التخلص من الأشياء في Close() أو Dispose() الطريقة التي يمكن أن يستدعيها مستخدم الفصل بشكل صريح.يتم استدعاء اللمسات النهائية (المدمرة) بواسطة GC.

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

ما يجب استخدامه؟

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

نصائح أخرى

هذا ال Finalizer.لكي نكون صادقين، نادرًا ما تحتاج إلى كتابة خاتمة.تحتاج حقًا إلى كتابة واحدة فقط إذا:

  • لديك وصول مباشر إلى مورد غير مُدار (على سبيل المثال.من خلال IntPtr) ولا يمكنك استخدامها SafeHandle مما يجعل الأمر أسهل
  • أنت تنفذ IDisposable في فئة غير مختومة.(أفضلي هو إغلاق الفئات ما لم تكن مصممة للوراثة.) تعتبر أداة الإنهاء جزءًا من نمط التخلص الأساسي في مثل هذه الحالات.

ويتم استخدامه للإشارة إلى المدمر للفئة.

ونفس C ++، انها المدمر. ولكن في C # كنت لا يطلق عليه explicitely، يتم استدعاء عندما يحصل جمعت الكائن.

تالفة (C # برمجة دليل) . كن على علم، ومع ذلك أنه، على خلاف C ++، مبرمج لا تملك السيطرة على عندما يتم استدعاء المدمر لأن هذا يتم تحديدها من قبل هواة جمع القمامة.

~ عادة يمثل deconstructor. الذي تديره الحق قبل أن يموت كائن.

هنا هو وصف C # deconstructors وجدت

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