هل يمنعني البيان باستخدام الأشياء أو تدمير الأشياء؟

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

  •  21-08-2019
  •  | 
  •  

سؤال

إذا استخدمت شيئًا مثل:

using (OdbcConnection conn = new OdbcConnection(....))
{
  conn.open();
  my commands and sql, etc.
}

هل يجب أن أفعل conn.close () ؛ أم هل يمنعني البيان باستخدام هذه المكالمة الأخيرة؟ هل تتخلص من كل شيء في كتلة استخدام؟ على سبيل المثال ، إذا دعوت كائنات أخرى غير مرتبطة ، فهل من الممكن أن تنخفض تلقائيًا؟

شكرًا لك. لم أكن واضحًا بعد القراءة حول استخدام موقع Microsoft. أريد أن أتأكد من أنه ليس لدي أي تسريبات للذاكرة.

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

المحلول

  1. سوف تستخدم كتلة التخلص من ODBCConnection.
  2. تعمل قواعد النطاق العادية لأي شيء يتم إعلانه داخل الكتلة.
  3. لن يقوم استخدام الكتلة بتنظيف أي كائنات أخرى قابلة للتهاب. إنه ينظف العنصر المعلن فقط
    • لاحظ أنه يمكنك التعشيش باستخدام الكتل ، أو إذا كانت العناصر هي نفس النوع ، فيمكن تهيئة عناصر متعددة في نفس الوقت.

شاهد الجزء العلوي من إجابتي الأخرى كيف يمكنني استخدام الكلمة الرئيسية في C# لمزيد من المعلومات.

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


تحرير] مثل التهيئة المتعددة في A باستخدام: تهيئة أكثر من كائن واحد في نفسه باستخدام دون الحاجة إلى العش باستخدام الكتل إذا كانت الكائنات هي نفس النوع:

using (Bitmap b1 = new Bitmap("file1"), b2 = new Bitmap("file2")) 
{ ... }

ذكر جويل كويورن التراص ، وهو تعشيش ولكنه يحذف الأقواس ، بقدر ما يمكنك حذف الأقواس في أ for, ، أو if بيان. واجهة المستخدم لا تتم إعادة تهيئة بمسافة بادئة. سأكون فضوليًا كيف يبدو IL.

using(Bitmap b = new Bitmap("filex"))
using(Graphics g = Graphics.FromImage(b))
{ 
}

إنه خطأ لاستخدام وضع كائنات مختلفة في نفس الوقت باستخدام error CS1044: Cannot use more than one type in a for, using, fixed, or declaration statement.

// error CS1044
using(Bitmap b = new Bitmap("filex"), Graphics g = Graphics.FromImage(b)) 

نصائح أخرى

سوف يتعامل البيان باستخدام الاتصال بالطرق الإغلاق والتخلص من الأساليب لك.

سكوت هانسلمان لديه شرح جيد جدا للبيان باستخدام.

يضمن العبارة استخدام أن الكائن الذي ينفذ diSposable يتم التخلص منه. سوف يتخلص فقط من الكائن الذي يشير إلى الكتلة باستخدام الكود الخاص بك بشكل أساسي إلى:

OdbcConnection conn = new ....;
try
{
   conn.open();
   conn.....
}
finally
{
   conn.dispose();
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top