Správa prostředků: Použití klíčového slova (F#)
Toto téma popisuje klíčové slovo use a using funkce, kterou můžete řídit inicializace a uvolnění prostředků.
Zdrojích
Termín prostředku se používá více než jedním způsobem.Ano, prostředky mohou být údaje, které aplikace používá jako řetězce, grafiky a podobně, ale v tomto kontextu zdroje odkazuje na software nebo prostředky operačního systému, například grafické zařízení kontexty, popisovačů souborů, připojení k síti a databáze, souběžnosti objekty, jako jsou například čekání úchyty atd.Použití těchto zdrojů aplikace zahrnuje získání prostředků z operačního systému nebo jiného poskytovatele zdrojů, následovaný novější verzi zdroje do fondu, takže mohou být poskytnuty do jiné aplikace.Aplikace uvolnit prostředky zpět do společného fondu dojít k problémům.
Správa prostředků
Zodpovědně a efektivně spravovat zdroje v aplikaci, musí uvolnit prostředky okamžitě a předvídatelným způsobem.Na.NET Framework umožňuje provést poskytnutím IDisposable rozhraní.Typ, který implementuje IDisposable má Dispose metodu, která správně uvolnit zdroje.Kvalitně aplikace zaručit, že Dispose je volána neprodleně libovolný objekt, který obsahuje omezenou prostředek již není potřeba.Naštěstí většina.NET jazyky podporovat zjednodušení a F# je bez výjimky.Existují dvě konstrukce užitečné jazyka, které podporují vzorek dispose: use vazby a using funkce.
použít vazbu
use Klíčové slovo má formulář, který se podobá se let vazba:
use value =expression
Poskytuje stejné funkce jako let vazba, ale přidá voláním Dispose na hodnotu, pokud hodnota mimo rozsah.Poznámka, že kompilátor vloží kontrolu hodnotu null, pokud hodnota je null, volání Dispose nebude použita.
Následující příklad ukazuje, jak zavřít soubor automaticky pomocí use klíčové slovo.
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."
[!POZNÁMKA]
Můžete použít use ve výpočtu výrazy v takovém případě upravenou verzi use výrazu.Další informace naleznete v tématu Sekvence (F#), Asynchronní pracovní postupy (F#) a Výpočet výrazy (F#).
pomocí funkce
using Funkce má následující tvar:
using (expression1) function-or-lambda
V using výraz, expression1 vytvoří objekt, který musí být zneškodněny.V důsledku expression1 (objekt, který musí být zneškodněny) se stane argument, value, na function-or-lambda, který je buď funkci, která očekává jeden zbývající argument typu, který odpovídá hodnotě vytvořené expression1, nebo lambda výraz, který očekává argument typu.Na konci spuštění funkce runtime volá Dispose a uvolňuje prostředky (Pokud není hodnota null, v takovém případě nebude použita volání Dispose).
Následující příklad ukazuje using výrazu s lambda výraz.
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."
Další příklad ukazuje using výraz s funkcí.
let printToFile (file1 : System.IO.StreamWriter) =
file1.WriteLine("Test output");
using (System.IO.File.CreateText("test.txt")) printToFile
Všimněte si, že funkce může být funkce, která má některé argumenty, které již použita.Následující příklad kódu to ukazuje.Vytvoří soubor, který obsahuje řetězec XYZ.
let printToFile2 obj (file1 : System.IO.StreamWriter) =
file1.WriteLine(obj.ToString())
using (System.IO.File.CreateText("test.txt")) (printToFile2 "XYZ")
using Funkci a use vazba způsoby téměř rovnocenné provádět stejnou věc.using Klíčové slovo poskytuje větší kontrolu nad při Dispose se nazývá.Při použití using, Dispose se nazývá na konci funkce nebo lambda výraz; Při použití use klíčové slovo, Dispose se nazývá na konci obsahující bloku kódu.Obecně by měly raději používat use místo using funkce.