إدارة الموارد: استخدم كلمة أساسية (F#)

يصف هذا الموضوع كلمة أساسية use usingدالة، بحيث يمكن التحكم في عملية تهيئة والإصدار للموارد.

موارد

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

إدارة موارد

إلى responsibly وفاعلية إدارة الموارد في تطبيق ما، يجب أن تقوم بتحرير الموارد فورا و بطريقة أفضل. يساعد.NET Framework في القيام بذلك بواسطة توفير IDisposableالواجهة. نوع الذي يطبق IDisposableيحتوي Disposeأسلوب، على تحرير بشكل صحيح موارد. تطبيقات well-written يضمن ذلك Disposeهو تسمى فورا عند أي الكائن الذي يحتوي على مورد محدد هو لم تعد هناك حاجة. ولحسن الحظ، معظم اللغات.NET بتوفير الدعم لجعل th هو أسهل، وب # هو لا ‏‏ استثناء. هناك نوعين بنيات لغة مفيدة تدعم نقش تخلص: useربط و usingدالة.

استخدم ربط

useكلمة أساسية له نموذج مشابهة لتلك الخاصة letربط:

استخدمvalue=expression

ويوفر نفس الوظيفة letربط ولكنه يضيف يتصل إلى Disposeتشغيل القيمة عند القيمة خارج نطاق. ملاحظة أن المحول البرمجي بإدراج null فحص من القيمة، أنه عند القيمة هو null، الاستدعاء Disposeهو لا جرت.

يظهر المثال التالي كيفية إغلاق ملف تلقائياً باستخدام useالكلمة الأساسية.

open System.IO

let writetofile filename obj =
   use file1 = File.CreateText(filename)
   file1.WriteLine("{0}", obj.ToString() )
   // file1.Dispose() is called implicitly here.

writetofile "abc.txt" "Humpty Dumpty sat on a wall."

ملاحظة

يمكنك استخدام useفي احتساب التعابير، في هذه الحالة الإصدار مخصص من useيتم استخدام التعبير. لمزيد من المعلومات، راجع تسلسلات (F#) ، مهام سير العمل غير متزامن (F#) ، و التعبيرات احتساب (F#).

استخدام دالة

usingدالة على الشكل التالي:

using (expression1) function-or-lambda

في usingتعبير، expression1يقوم بإنشاء الكائن الذي يجب أن يتم التخلص من. النتيجة expression1يصبح (الكائن التي يجب أن تكون dهوposed) وسيطة، value، إلى function-or-lambda، أي هو أما دالة تتوقع وسيطة مفردة متبقية من النوع الذي يطابق القيمة التي تم إنتاجها من قبل expression1، أو تعبير lambda يتوقع وسيطة من هذا النوع. عند انتهاء تنفيذ دالة، وقت التشغيل باستدعاء Disposeويحرر موارد (إلا إذا هو قيمة null، في هذه الحالة استدعاء Dهوpose هو عدم محاولة).

يلي مثال يوضح usingالتعبير باستخدام تعبير lambda.

open System.IO

let writetofile2 filename obj =
    using (System.IO.File.CreateText(filename)) ( fun file1 ->
        file1.WriteLine("{0}", obj.ToString() )
    )

writetofile2 "abc2.txt" "The quick sly fox jumped over the lazy brown dog."

يوضح المثال التالي usingتعبير باستخدام دالة.

let printToFile (file1 : System.IO.StreamWriter) =
    file1.WriteLine("Test output");

using (System.IO.File.CreateText("test.txt")) printToFile

لاحظ أن الدالة قد تكون دالة تحتوي على بعض الوسيطات المطبقة مسبقاً. يوضح مثال التعليمة البرمجية التالي هذا. يقوم بإنشاء ملف يحتوي على سلسلة XYZ.

let printToFile2 obj (file1 : System.IO.StreamWriter) =
    file1.WriteLine(obj.ToString())

using (System.IO.File.CreateText("test.txt")) (printToFile2 "XYZ")

usingدالة و useيتم توثيق طرق يساوي تقريبا إلى القيام بنفس الشيء. usingالكلمة الأساسية يوفر تحكم أكبر في وقت Disposeهو تسمى. عند استخدام using، Disposeهو يسمى في إنهاء التعبير دالة أو لامدا؛ عند استخدام useكلمة أساسية، Disposeهو يسمى في إنهاء يحتوي على رمز حظر. بشكل عام، يجب أن تفضل إلى استخدام useبدلاً من usingدالة.

راجع أيضًا:

المرجع

IDisposable

موارد أخرى

مرجع لغة ب #