ما هو C# باستخدام الكتلة ولماذا يجب أن أستخدمه؟ [مكرر

StackOverflow https://stackoverflow.com/questions/212198

سؤال

هذا السؤال لديه بالفعل إجابة هنا:

ما هو الغرض من استخدام الكتلة في C#؟ كيف يختلف عن متغير محلي؟

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

المحلول

إذا كان النوع ينفذ قابلاً للتخلص من ذلك ، فإنه يتخلص منه تلقائيًا.

معطى:

public class SomeDisposableType : IDisposable
{
   ...implmentation details...
}

هذه مكافئة:

SomeDisposableType t = new SomeDisposableType();
try {
    OperateOnType(t);
}
finally {
    if (t != null) {
        ((IDisposable)t).Dispose();
    }
}

using (SomeDisposableType u = new SomeDisposableType()) {
    OperateOnType(u);
}

والثاني أسهل في القراءة والصيانة.

نصائح أخرى

Using المكالمات Dispose() بعد using-بقي -يترك ، حتى لو كان الكود يلقي استثناء.

لذلك عادة ما تستخدم using بالنسبة للدروس التي تتطلب التنظيف من بعدها ، مثل IO.

لذلك ، هذا باستخدام الكتلة:

using (MyClass mine = new MyClass())
{
  mine.Action();
}

سيفعل نفس:

MyClass mine = new MyClass();
try
{
  mine.Action();
}
finally
{
  if (mine != null)
    mine.Dispose();
}

استخدام using هو وسيلة أقصر وأسهل للقراءة.

من MSDN:

C#، من خلال .NET Framework Common Language Runtime (CLR) ، يطلق تلقائيًا الذاكرة المستخدمة لتخزين الكائنات التي لم تعد مطلوبة. إصدار الذاكرة غير محدد. يتم إصدار الذاكرة كلما قرر CLR إجراء جمع القمامة. ومع ذلك ، من الأفضل عادة إصدار موارد محدودة مثل مقابض الملفات واتصالات الشبكة في أسرع وقت ممكن.

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

وبعبارة أخرى ، using يخبر البيان .NET بإصدار الكائن المحدد في using كتلة بمجرد أن لا تكون هناك حاجة إليها.

يتم استخدام العبارة باستخدام العمل مع كائن في C# يقوم بتنفيذ IDisposable واجهه المستخدم.

ال IDisposable الواجهة لها طريقة عامة واحدة تسمى Dispose الذي يستخدم للتخلص من الكائن. عندما نستخدم العبارة باستخدام ، لا نحتاج إلى التخلص من الكائن بشكل صريح في الكود ، فإن العبارة باستخدام يعتني به.

using (SqlConnection conn = new SqlConnection())
{

}

عندما نستخدم الكتلة أعلاه ، يتم إنشاء الكود داخليًا على هذا النحو:

SqlConnection conn = new SqlConnection() 
try
{

}
finally
{
    // calls the dispose method of the conn object
}

لمزيد من التفاصيل اقرأ: فهم بيان "استخدام" في C#.

لاحظ أيضًا أن الكائن الذي تم إنشاؤه عبر using يقرأ فقط داخل الكتلة باستخدام. الرجوع إلى المرجع C# الرسمي هنا.

يضمن وضع الكود في كتلة استخدام التخلص من الكائنات (وإن لم يتم جمعها بالضرورة) بمجرد أن يترك التحكم الكتلة.

using (B a = new B())
{
   DoSomethingWith(a);
}

يعادل

B a = new B();
try
{
  DoSomethingWith(a);
}
finally
{
   ((IDisposable)a).Dispose();
}

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

يحصل العبارة باستخدام موارد واحدة أو أكثر ، وتنفيذ بيان ، ثم التخلص من المورد.

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