سؤال

ممكن مكررة:
ماذا تعني تيلدة (~) في C #؟

class ResourceWrapper
{
    int handle = 0;
    public ResourceWrapper()
    {
        handle = GetWindowsResource();
    }
    ~ResourceWrapper()                     //this line here
    {
        FreeWindowsResource(handle);
        handle = 0;
    }
    [DllImport("dll.dll")]
    static extern int GetWindowsResource();
    [DllImport("dll.dll")]
    static extern void FreeWindowsResource(int handle);
}

ما الذي يقوم به تيلد تفعل على الخط المشار إليه.

اعتقدت أنه كان المشغل البت، والصمم الذي لا أفهمه حقا أن الكتلة كله هناك، (الخط المعلق وأقواسه بلوفك بعد ذلك)، ليس ميثدا، أو معلمة أو أي شيء، ما هو عليه ولماذا هناك تيلدة قبل ذلك؟

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

المحلول

إنه destructor.. وبعد إنه يهتم بأن يتم إصدار جميع الموارد عند جمع القمامة.

نصائح أخرى

هذا ينفذ النهائي (طريقة الانتهاء) للفئة. عادة يجب أن لا تنفذ النهائي.

على سبيل المثال، قم بذلك للفصول الدراسية التي تعقد موارد خارجية غير مدارة ولكن تأكد من تنفيذ النمط غير قابل للانهيار في هذه الحالة أيضا.

مثل في C ++، ~ClassName هي طريقة التدمير. يتم استدعاؤه في C # عندما يتم تنظيف الكائن في السؤال بواسطة جامع القمامة. على عكس C ++ حيث توجد أوقات محددة عند استدعاء المدمرة، لا توجد طريقة للتنبؤ بها عند استدعاؤها (أو حتى لو سيتم استدعاؤها) في C #.

ما ربما تبحث عنه هو IDisposable نمط، الذي يوفر نهج أفضل بكثير لهذا.

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

ACK، لقد وجدت الإجابة فقط ولا أستطيع أن أرى كيفية حذف سؤالي. يحدد destructor للفئة

ليس لدي أدنى فكرة عن C #، ولكن من ما يفعله القانون، هذا يبدو وكأنه deconstressor، قائلا

  1. المجانية تمت الإشارة إليها عن طريق handle
  2. جلس handle ل 0 لكى تتأكد

سوف نوع من الذهاب مع فكرة "لا" كذلك ... :)

قد أكون مخطئا على الرغم من ...

نايتز

back2dos

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