C # باستخدام استخدام كتلة مع الكائنات الثابتة

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

  •  09-09-2019
  •  | 
  •  

سؤال

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

public class WrapperForMyOldApp
{

    public static ItemThatINeed item1;
    public static ItemThatINeed item2;

    public WrapperForMyOldApp () 
    {
        item1 = new ItemThatINeed();
        item2 = new ItemThatINeed();
    }

    public static go()
    {
        // some stuff that i need to do with items 1 and 2
    }
}

public class MainProgram 
{
    .
    .
    .

    public void MethodThatNeedsToMakeUseOfMyApp ()
    {
        ....
        using (WrapperForMyOldApp oldAPp = new WrapperForMyOldApp())
        {
            WrapperForMyOldApp.go();
        }
    }
}

حسنا، لذلك فإن السؤال هنا هو: هل شعرت الآن بتشكك آثار استخدام كتلة و / أو إنشاء أي آثار جانبية غريبة قد تؤثر سلبا على الطبقة الرئيسية للفئة؟ أعتقد أن كائن المجمع ومحتوياته سيتم التخلص منه وسيستمر التنفيذ كما هو متوقع ولكن هناك أي شيء أحتاج إلى أن أدرك ذلك أنا أشرف؟

شكرا!

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

المحلول

من أجل العمل، ستحتاج إلى تطبيق WrapPerformyOldApp قابل للانهيار.

استدعاء التخلص () في WrapperFormyOldApp سيقوم بعد ذلك بتنظيفك.

ومع ذلك، يتم استخدام الكائنات الثابتة عادة للكائنات التي لها حياة خارج الكائن الوحيد. بشكل عام، لهذا النوع من الاستخدام، كنت تقوم بعمل مثيلات غير ثابتة غير ثابتة، وتوليدها في منشئ WrapperFormyOldApp الخاص بك، ثم قم بتنظيفها في WrapperFormyoldapp.dispose ().

مع كائنات ثابتة، من المحتمل أن تخلق كابوسا - أنت تقوم بإنشاء الكائن، ثم تقول أنك تريد إجراء عملية التنظيف (في نهاية كتلة الاستخدام)، بحيث يمكنك التخلص منها () سوف تقوم بتنظيف الثابت شاء. ومع ذلك، إذا تعتادوا مرة أخرى، فما الذي يجب أن يحدث؟ ما هو السلوك الصحيح إذا قمت بإنشاء مثيلات اثنين من WrapperFormyoldapp في مؤشرات الترابط 2؟ وأود أن أعتبر هذه المشكلات إذا كنت تريد التنظيف الحتمي.

نصائح أخرى

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

حسنا، إذا WrapperForMyOldApp تنفذ IDisposable, ، وخاصتك Dispose() يمكن أن يؤكد التنفيذ من التخلص من أي موارد، ثم يجب أن تعمل ... ولكن يمكن أن يكون هناك آثار جانبية أخرى. يمكن أن يتغير الرمز الحالة العالمية (الثابتة)، مثل الثقافة وما إلى ذلك. يمكن أن تفرخ المواضيع. كل أنواع الأشياء.

إنه ليس نهجا سيئا، لكنك بحاجة إلى معرفة الكود الذي تتغلف عنه هل لمعرفة ما إذا كان Dispose() سوف تفعل أي شيء مفيد.

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