Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Komutlar
Bu makale aşağıdaki derleyici hatalarını kapsar:
-
CS0245: Yok ediciler ve
object.Finalizedoğrudan çağrılamaz. VarsaIDisposable.Dispose'ü çağırmayı düşünün. -
CS0728: Bir using veya
lockdeyiminin bağımsız değişkeni olan yerel değişkene yanlış atama olabilir. ÇağrıDisposeveya kilidi açma, yerel değerin özgün değerinde gerçekleşir. -
CS1674: Using deyiminde kullanılan tür örtük olarak '
System.IDisposable' olarak dönüştürülebilir olmalıdır. -
CS8410: 'Zaman uyumsuz
usingbir deyimde kullanılan tür örtük olarak 'System.IAsyncDisposable' olarak dönüştürülebilir olmalı veya uygun bir 'DisposeAsync' yöntemi uygulanmalıdır. -
CS8417: Zaman uyumsuz using deyiminde kullanılan türün '
System.IAsyncDisposable' veya uygun bir 'DisposeAsync' yöntemi uygulaması gerekir. 'using' yerine 'await using' demek mi istediniz? -
CS8418: Using deyiminde kullanılan tür '
System.IDisposable' uygulamalıdır. 'Kullanmak' yerine 'await using' mi demek istedin? - CS8647: Bir using değişkeni doğrudan bir switch ifadesi bölgesi içinde kullanılamaz (köşeli parantez kullanmayı göz önünde bulundurun).
-
CS8648: A
goto, bir using bildiriminin ardından bir konuma atlayamaz. -
CS8649: A
goto, aynı blok içindeki bir using bildiriminden önce bir konuma atlayamaz. - CS9229: Bildirim kullanılarak değiştiriciler yerleştirilemez.
IDisposable ve IAsyncDisposable Özelliklerini Gerçekleştirme
Aşağıdaki derleyici hataları ve uyarıları dispose desenini uygulama veya kullanma ile ilgili sorunları gösterir:
-
CS0245: Yıkıcı yöntemler ve
object.Finalizedoğrudan çağrılamaz. Varsa,IDisposable.Disposeçağırmayı düşünün. -
CS1674: Using deyiminde kullanılan tür örtük olarak '
System.IDisposable' olarak dönüştürülebilir olmalıdır. -
CS8410: Zaman uyumsuz
usingifadesinde kullanılan tür 'System.IAsyncDisposable' biçimine dönüştürülebilmeli veya uygun bir 'DisposeAsync' yöntemi olmalıdır. -
CS8417: Eşzamansız
usingbir deyimde kullanılan tür, 'System.IAsyncDisposable' veya uygun bir 'DisposeAsync' yöntemini uygulamalıdır. 'await using' yerine 'using' demek istediniz mi? -
CS8418: Using deyiminde kullanılan türün '
System.IDisposable' uygulaması gerekir. 'using' yerine 'await using' demek mi istedin?
using deyimi, using bloğunun sonunda kaynakların düzgün bir şekilde atılmasını sağlar.
using deyimiyle bir türü kullanmak için uygun bertaraf arabirimini uygulaması gerekir. Zaman uyumlu using deyimler için tür IDisposable uygulamalıdır. Asenkron await using deyimler için tür, IAsyncDisposable uygulaması gerekir.
-
Finalize doğrudan çağrılamıyor (CS0245): Bir yıkıcıyı veya Object.Finalize yöntemi doğrudan çağıramazsınız. Nesnelere artık başvurulmadığında çöp toplayıcı otomatik olarak sonlandırıcıları çağırır. Deterministik temizleme için bunun yerine IDisposable 'i uygulayın ve
Disposemetodunu çağırın. -
Tür IDisposable (CS1674) uygulamalıdır: Yalnızca IDisposable arabirimini uygulayan türler bir
usingdeyiminde kullanılabilir. Değer türleri bu arabirimi uygulamaz ve uygun kısıtlamaları olmayan genel tür parametrelerinin atılabilir olduğu varsayılamaz. Genel türlerle çalışırken olduğu gibiwhere T : IDisposablebir tür kısıtlaması uygulayın. -
Tür IAsyncDisposable (CS8410) uygulamalıdır:
await usingile kullanılan türler, IAsyncDisposable uygulamalı veya uygun birDisposeAsyncyöntem sağlamalıdır. Türünüz asenkron elden çıkarmayı desteklemiyorsa, bunun yerine senkronusingbir deyim kullanın veya gerekli arabirimi uygulayın. -
Eşleşmeyen elden çıkarma düzeni (CS8417, CS8418): CS8417, yalnızca IDisposable uygulayan bir türle
await usingkullandığınızda oluşur. CS8418, yalnızca IAsyncDisposable uygulayan bir türle zaman uyumluusingkullandığınızda oluşur.usingAnahtar sözcüğünü türünüzün uyguladığı arabirimle eşleştirin veya her iki deseni de desteklemeniz gerekiyorsa her iki arabirimi de uygulayın.
Daha fazla bilgi için bkz Sonlandırıcılar, Dispose yöntemi uygulayın ve DisposeAsync yöntemi uygulayın.
Değişken kapsamı ve denetim akışını kullanma
Aşağıdaki derleyici hataları ve uyarıları, denetim akışı deyimleri içindeki değişkenlerin yanlış kullanımıyla using ilgilidir:
-
CS0728: Yerel değişken, bir
usingveyalockifadesi argümanı olarak, yanlış atamaya yol açabilir. ÇağrıDisposeveya kilidi açma, yerelin özgün değeri üzerinde olur. - CS8647: Bir using değişkeni doğrudan bir switch bloğu içinde kullanılamaz (parantez kullanmayı göz önünde bulundurun).
-
CS8648: A
goto, bir using bildiriminin ardından bir konuma atlayamaz. -
CS8649: A
goto, aynı blok içindeki bir using bildiriminden önce bir konuma atlayamaz.
ile using bildirilen değişkenlerin kaynak sızıntılarını önleyen belirli kapsam kuralları vardır. Derleyici, uygun şekilde elden çıkarılmasını sağlamak için bu kuralları zorlar.
Değişkeni kullanmaya atama (CS0728): Bu uyarı, bir deyimdeki kaynak olan değişkene yeni bir
usingdeğer atadığınız anlamına gelir. Dispose çağrısı, yeni atanan değerde değil özgün değerde gerçekleşir ve bu da kaynak sızıntılarına neden olabilir. Kaynağı daha sonra atamak yerine,usingdeyimi bildiriminde başlatın.Switch bölümünde değişken kullanma (CS8647):
usingbildirim, kapsamının sonunda atılan bir değişken oluşturur. Anahtar bölümünde küme ayraçları olmadan doğrudan kullanıldığında kapsam belirsizdir ve hatalara yol açabilir. Kapsamı net bir şekilde tanımlamak için bölüm içeriğini küme ayraçları içine alın.Goto deyimleri ve kullanım bildirimleri (CS8648, CS8649): Bildirimlerin üstünden atlamak için
gotodeyimlerini kullanamazsınız çünkü bu, doğru kaynak yönetimini atlamanıza neden olurusing. CS8648, birusingbildirimin üzerinden ileriye doğru atlarken oluşur ve CS8649, bildirimden öncekiusingbir konuma geri atlarken oluşur. Kodunuzu döngüler gibi yapılandırılmış kontrol akışını kullanacak şekilde yeniden yapılandırın veyausingbildirimi atlama hedefinin dışına taşıyın.
Daha fazla bilgi için bkz. using deyimi.
Yanlış using bildirim
- CS9229: Bildirim kullanılarak değiştiriciler yerleştirilemez.
using bildiriminde sarmalanan bir değişken bildirimi, aşağıdaki değiştiricilerden hiçbirini içeremez:
conststaticvolatilereadonly- Erişilebilirlik değiştiricileri:
public,protected,internal,private, ,protected internalveyaprivate protected
Aşağıdaki örnek CS9229 oluşturur:
using System;
class Program
{
static void Main()
{
// error CS9229: Modifiers cannot be placed on using declarations.
public using var resource = new Resource();
// error CS9229: Modifiers cannot be placed on using declarations.
static using var anotherResource = new Resource();
}
}
class Resource : IDisposable
{
public void Dispose() { }
}
Bu hatayı düzeltmek için değiştiriciyi bildirimden using kaldırın:
using var resource = new Resource();
Daha fazla bilgi için bakınız using deyimi.