سؤال

الكائنات التي تستمد من HAFALGORITHM مثل MD5CryptoServiceProvider لها طريقة تخلص ()، لكنها خاصة. بدلا من ذلك، له طريقة واضحة () والتي "تصدر كل الموارد" المستخدمة من قبل ذلك.

ماهذا الهراء؟

هل هذا كيفية التخلص من التخلص من الحاشدة بعد ذلك؟

var hasher = new MD5CryptoServiceProvider();

byte[] hashCode = hasher.ComputeHash(data);

hasher.Clear();

شخص ما يريد شرح هذا واحد بالنسبة لي؟ :)

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

المحلول

تبحث مع العاكس، Clear طريقة HashAlgorithm ما عليك سوى المكالمات الخاصة Dispose طريقة. سبب تعريض طريقة باسم Clear ربما كان فقط أن مصممي الفصل يعتقدون أنه سيكون اسما أكثر ملاءمة لخوارزمية التجزئة. ترى أنماط مماثلة داخل أجزاء أخرى من BCL، مثل Close بالنسبة System.IO.Stream. وبعد أيضا، أفضل الممارسات هنا هي استخدام using كتلة، والتي سوف تسميها تلقائيا Dispose الطريقة عندما انتهت.

نصائح أخرى

بينما ال Dipose() الطريقة خاصة، إذا قمت بإلقاء ذلك IDisposable يمكنك الوصول إليها. كما قال آخرون، رغم ذلك، Clear() سوف نسميها لك.

ومع ذلك، فإن النهج الأفضل هو إحاطة إعلان ومتغير المتغير في كتلة باستخدام ():

byte[] hashCode;

using(var hasher = new MD5CryptoServiceProvider())
{
    hashCode = hasher.ComputeHash(data);
}

يجب أن تدع مقبض GC من أجلك. هذه هي الوظيفة.

يجب التخلص منها بعض الموارد، مثل اتصالات DB ومقابض الملفات، لذلك ضع تلك الموجودة في using كتلة (C #). هذه ليست واحدة من تلك الحالات، رغم ذلك.

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