using deyimi - atılabilir nesnelerin doğru kullanıldığından emin olun
deyimi using
bir IDisposable örneğin doğru kullanılmasını sağlar:
var numbers = new List<int>();
using (StreamReader reader = File.OpenText("numbers.txt"))
{
string line;
while ((line = reader.ReadLine()) is not null)
{
if (int.TryParse(line, out int number))
{
numbers.Add(number);
}
}
}
Denetim deyiminin bloğundan ayrıldığında using
, alınan IDisposable bir örnek atılır. Özellikle deyimi, deyiminin using
bloğunda using
bir özel durum oluşsa bile atılabilir bir örneğin atılmasını sağlar. Yukarıdaki örnekte, tüm satırlar işlendikten sonra açık bir dosya kapatılır.
Bir IAsyncDisposable örneği doğru kullanmak için deyimini await using
kullanın:
await using (var resource = new AsyncDisposableExample())
{
// Use the resource
}
Örneklerin IAsyncDisposable kullanımı hakkında daha fazla bilgi için DisposeAsync yöntemi uygulama makalesinin Zaman uyumsuz atılabilir kullanım kullanma bölümüne bakın.
Ayraç gerektirmeyen bir using
bildirim de kullanabilirsiniz:
static IEnumerable<int> LoadNumbers(string filePath)
{
using StreamReader reader = File.OpenText(filePath);
var numbers = new List<int>();
string line;
while ((line = reader.ReadLine()) is not null)
{
if (int.TryParse(line, out int number))
{
numbers.Add(number);
}
}
return numbers;
}
Bir using
bildirimde bildirildiğinde, yerel değişken bildirildiği kapsamın sonunda atılır. Yukarıdaki örnekte, elden çıkarma bir yöntemin sonunda gerçekleşir.
Deyimi veya bildirimi tarafından using
bildirilen bir değişken salt okunur. Yeniden atayamaz veya veya ref
out
parametre olarak geçiremezsiniz.
Aşağıdaki örnekte gösterildiği gibi, bir using
deyimde aynı türdeki birkaç örneği bildirebilirsiniz:
using (StreamReader numbersFile = File.OpenText("numbers.txt"), wordsFile = File.OpenText("words.txt"))
{
// Process both files
}
Tek bir using
deyimde birkaç örneği bildirdiğinizde, bunlar bildirimin ters sırasına göre atılır.
Deyimini ve bildirimini using
, atılabilir desene uyan bir başvuru yapısı örneğiyle de kullanabilirsiniz. Yani, erişilebilir, parametresiz ve dönüş türüne sahip bir void
örnek Dispose
yöntemine sahiptir.
Deyimi using
aşağıdaki biçimde de olabilir:
using (expression)
{
// ...
}
burada expression
tek kullanımlık bir örnek üretir. Aşağıdaki örnekte şunlar gösterilmiştir:
StreamReader reader = File.OpenText(filePath);
using (reader)
{
// Process file content
}
Uyarı
Yukarıdaki örnekte, denetim deyiminden using
ayrıldıktan sonra atılabilir bir örnek zaten atılmış durumdayken kapsam içinde kalır. Bu örneği daha fazla kullanırsanız, örneğin, bir özel durumla karşılaşabilirsiniz. ObjectDisposedException Bu nedenle deyimi içinde using
veya bildirimiyle using
atılabilir bir değişken bildirmenizi öneririz.
C# dili belirtimi
Daha fazla bilgi için C# dil belirtiminin using deyimi bölümüne bakın ve "desen tabanlı kullanma" ve "using bildirimleri" hakkındaki teklif notu.