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
}
Örnekleri kullanma IAsyncDisposable 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, bildirildiği kapsamın sonunda yerel bir değişken atılır. Yukarıdaki örnekte, bertaraf bir yöntemin sonunda gerçekleşir.
deyimi veya bildirimi tarafından using
bildirilen bir değişken salt okunurdur. Yeniden atayamaz veya veya out
parametre ref
olarak geçiremezsiniz.
Aşağıdaki örnekte gösterildiği gibi, tek 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
}
Bir using
deyimde birkaç örneği bildirdiğinizde, bunlar bildirimin ters sırasına göre atılır.
Deyimini ve bildirimini using
tek kullanımlık 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 kapsamda 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
tek kullanımlık bir değişken bildirmenizi öneririz.
C# dili belirtimi
Daha fazla bilgi için C# dil belirtimininusing deyimi bölümüne bakın ve "desen tabanlı kullanma" ve "using bildirimleri" hakkındaki teklif notu.