سؤال

قد يبدو هذا مثل سؤال Noddy، لكنني كنت أبحث في ذلك لأنني سمعت أن شخصا يدعي أنه يجب عليك الاتصال عن قرب () على FileStream، حتى لو كان في كتلة باستخدام (ولديهم رمز عند إغلاق () الحق في نهاية الكتلة).

أعلم أن إغلاق () يهدف إلى استدعاء التخلص ()، لكنني اعتقدت أنني أنظر أعمق لأن هذا هو رمز .NET 1.1، وكان الجزء الأكبر من تجربتي مع 2.0 على.

الشيء الوحيد الذي ضربني هو أن وثائق MSDN للتخلص من FileStream () وتخلصها (BOOL) ل .NET 2.0 ON، ولكن التخلص منها فقط (BOOL) ل .NET 1.1.

اعتقدت أن هذا قد يكون رقابة، لذلك استخدمت العاكس للنظر في التجمع - وهناك أيضا، أرى التخلص (BOOL)، ولكن لا تخلص ().

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

هل هناك بعض السحر المترجم الذي يحدث، أو أنا أفتقد تنفيذ مخفي للتخلص () في مكان ما (والذي من المفترض أن تتخلص المكالمات (صحيح) أو التخلص (خطأ)؟)

أخيرا (لا يقصد التورية)، هل يمكنك تأكيد أن تحديد نطاق FileStream في استخدام Block سيتم إغلاق الدفق عند خروج النطاق في .NET 1.1؟

تعديل

فقط للتوضيح، هذا رمز C #. أنا أفهم أن vb.net لم أحصل على بيان الاستخدام حتى .NET 2.0، لكن فهمي هو أن C # كان في 1.1 (و 1.1 الرمز 1.1 هنا لديه وتكون يجمع)

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

المحلول

لقد نفذت مضحكا قليلا، لكنها هناك: الفئة الأساسية ل FILESTREAM: System.IO.IO. تنفذ تنفذات ناهتة (FileStream فقط يرثها).

تنفيذه فئة دفق الأساس الناشئة () صراحة، لذلك سوف ترى فقط التخلص () إذا قمت بإلقاء الدفق على أنه قابل للانتعراض (وهو ما يستخدم {}).

stream.Dispose () المكالمات stream.close ().

(حصلت على كل هذا عبر العاكس)

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