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.
Başvuru değişkeni güvenlik kuralları ihlal edildiğinde aşağıdaki hatalar oluşturulabilir:
-
CS8166: Parametre olmadığından
refbaşvuruya göre parametre döndürülemiyor -
CS8167: Bir veya
refparametresi olmadığındanoutparametrenin bir üyesine başvurarak döndürülemiyor - CS8168: Başvuru yerel başvurusu olmadığından yerel döndürülemiyor
- CS8169: Başvuruya göre yerel değişkenin bir üyesi döndürülemiyor çünkü bu bir başvuru yerel değişkeni değil
-
CS8345: Alan veya otomatik uygulanan özellik, bir
ref structörnek üyesi olmadığı sürece türünde olamaz. -
CS8351: Koşullu işlecin dalları
refuyumsuz bildirim kapsamlarına sahip değişkenlere başvuramaz - CS8374: Kaynağın başvuru ataması hedeften daha dar bir kaçış kapsamına sahip olamaz.
- CS9075: Geçerli metot kapsamında olduğundan bir parametre referans olarak döndürülemez
- CS9076: Geçerli yöntem kapsamında olduğundan parametrenin bir üyesine başvurarak döndürülemiyor
-
CS9077: Bir parametre aracılığıyla başvuruyla
refparametre döndürülemez; yalnızca return deyiminde döndürülebilir -
CS9078: Parametrenin bir üyesine bir parametre aracılığıyla başvuru yapılarak
refdöndürülemez; yalnızca return deyiminde döndürülebilir - CS9079: Kaynak, yalnızca bir dönüş deyimi aracılığıyla geçerli yöntemden kaçabileceği için kaynağı hedefe başvurulabilir olarak atamak mümkün değil.
- CS9096: Kaynak, hedefe atanamaz çünkü kaynak, hedefe göre daha geniş bir değer kaçış kapsamına sahiptir ve kaynak üzerinden daha dar kaçış kapsamına sahip değerlerin atanmasına izin verir.
Başvuru değişkeni güvenlik kuralları ihlal edildiğinde aşağıdaki uyarılar oluşturulur:
- CS9080: Bu bağlamda değişkenin kullanılması başvuruda bulunan değişkenleri bildirim kapsamı dışında kullanıma sunabilir
- CS9081: Bu bağlamda bir türün stackalloc ifadesinin sonucu, ifadenin yer aldığı yöntemin dışında gösterilebilir
- CS9082: Yerel değişken başvuru ile döndürülüyor, ancak referansla döndürülmesi mümkün olmayan bir değerle başlatıldı
- CS9083: Bir üye referans olarak döndürülüyor ancak referans olarak döndürülemeyecek bir değerle başlatıldı
- CS9084: Yapı üyesi, referansla 'this' veya diğer örnek üyeleri döndürür
- CS9085: Bu başvuru kaynağı hedefe atar, ancak kaynağın çıkış kapsamı hedeften daha dardır.
- CS9086: Başvuru koşullu işlecinin dalları uyumsuz bildirim kapsamlarına sahip değişkenlere başvurur
-
CS9087: Bu, başvuruya göre bir parametre döndürür, ancak parametre
refdeğildir - CS9088: Bu, referansla bir parametre döndürür ancak mevcut yöntemle sınırlıdır
-
CS9089: Bu, veya
refparametresi olmayan parametrenin biroutüyesine başvurarak döndürür - CS9090: Bu, geçerli yöntem kapsamında olan bir parametre üyesini referansla döndürüyor
- CS9091: Bu, başvuruya göre yerel döndürür, ancak bir başvuru yerel başvurusu değildir
- CS9092: Bu, başvuruya göre yerel bir üye döndürür, ancak başvuru yerel başvurusu değildir
- CS9093: Bu referans kaynağı hedefe atar, ancak kaynak yalnızca bir dönüş deyimi aracılığıyla mevcut metot kapsamından çıkabilir.
-
CS9094: Bu, bir parametre aracılığıyla başvuruyla bir
refparametre döndürür; ancak yalnızca return deyiminde güvenle döndürülebilir -
CS9095: Bu, parametrenin bir üyesine bir
refparametre aracılığıyla başvurarak döndürür; ancak yalnızca return deyiminde güvenle döndürülebilir - CS9097: Bu başvuru kaynağı hedefe atar, ancak kaynak, kaynaktan daha dar çıkış kapsamlarına sahip değerlerin hedefi üzerinden atamaya izin veren hedeften daha geniş bir değer kaçış kapsamına sahiptir.
Uyumsuz kapsamlara sahip referansları döndürme
Derleyici, değişkenin ömrü yöntemin kapsamının ötesine geçmediğinde bir değişkene başvuru döndürmenizi engeller. Bu hatalar, ref ile olarak bildirilmemiş veya geçerli yöntemle sınırlı bir kapsama sahip olan bir parametrenin, yerel değişkenin veya üyenin referans olarak döndürülmeye çalışıldığında oluşur.
Hatalar:
-
CS8166: Parametre olmadığından
refbaşvuruya göre parametre döndürülemiyor -
CS8167: Bir veya
refparametresi olmadığındanoutparametrenin bir üyesine başvurarak döndürülemiyor - CS8168: Başvuru yerel başvurusu olmadığından yerel döndürülemiyor
- CS8169: Başvuruya göre yerel değişkenin bir üyesi döndürülemiyor çünkü bu bir başvuru yerel değişkeni değil
- CS9075: Geçerli yöntem kapsamına dahil olduğu için bir parametre referans olarak geri döndürülemez
- CS9076: Geçerli yöntem kapsamında olduğundan parametrenin bir üyesine başvurarak döndürülemiyor
-
CS9077: Bir parametre aracılığıyla başvuruyla
refparametre döndürülemez; yalnızca return deyiminde döndürülebilir -
CS9078: Parametrenin bir üyesine bir parametre aracılığıyla başvuru yapılarak
refdöndürülemez; yalnızca return deyiminde döndürülebilir
Uyarı:
-
CS9087: Bu, başvuruya göre bir parametre döndürür, ancak parametre
refdeğildir - CS9088: Bu, başvuruya göre bir parametre döndürür ancak kapsamı geçerli yöntemle belirlenmiştir
-
CS9089: Bu, veya
refparametresi olmayan parametrenin biroutüyesine başvurarak döndürür - CS9090: Bu, geçerli yöntem kapsamındaki parametrenin bir üyesini referans olarak döndürür
- CS9091: Bu, başvuruya göre yerel döndürür, ancak bir başvuru yerel başvurusu değildir
- CS9092: Bu, başvuruya göre yerel bir üye döndürür, ancak başvuru yerel başvurusu değildir
-
CS9094: Bu, bir parametre aracılığıyla başvuruyla bir
refparametre döndürür; ancak yalnızca return deyiminde güvenle döndürülebilir -
CS9095: Bu, parametrenin bir üyesine bir
refparametre aracılığıyla başvurarak döndürür; ancak yalnızca return deyiminde güvenle döndürülebilir
Bu hataları çözmek için:
- Yöntem imzasını, parametreleri değer olarak geçmek yerine
refanahtar sözcüğü ile bildirerek değiştirin, bu da parametrenin depolama konumunun güvenli bir şekilde döndürülmesini sağlar çünkü çağıran, değişkenin ömrünü kontrol eder (CS8166, CS8167, CS9087, CS9089). - Yerel değişkenler için, bunları
refbir başvuru döndüren ifadeden veya bir başvuru parametresinden atayarak yerel olarak bildirin; bu da yerelin yöntem kapsamlı yaşam süresiyle (CS8168, CS8169, CS9091, CS9092) yeni bir değişken oluşturmak yerine yeterli yaşam süresine sahip depolamaya başvurmasını sağlar. -
scopeddeğiştirici ile bir parametre bildirildiğinde,scopeddeğiştirici onu yöntemden kaçabilecek şekilde başvurarak döndürmenizi açıkça kısıtladığından, bu parametreyi referans olarak döndürmekten kaçının ve bu da olası sarkma başvurularını önler (CS9075, CS9076, CS9088, CS9090). - Bir
refparametresinden gelen bir başvuruyu geri döndürmeniz gerekiyorsa, başvuruyu başka birrefparametreye atayıp geri döndürmek yerine doğrudan birreturn refifadesi kullanın; çünkü derleyici kaçış kapsamını yalnızca doğrudan dönüş ifadeleri (CS9077, CS9078, CS9094, CS9095) aracılığıyla izleyebilir.
Başvuru güvenliği kuralları hakkında daha fazla bilgi için başvuru iadeleri makalesine ve başvuru güvenli bağlamları ile ilgili C# standart bölümüne bakın.
Uyumsuz kapsamlara sahip referans atamaları
Derleyici, kaynak değişkenin hedeften daha dar bir kaçış kapsamına sahip olduğu durumlarda referans atama işlemlerini engeller. Referans ataması, hedeften kaynağın depolama konumuna bir referans oluşturur. Kaynak hedeften önce kapsamın dışına çıkabiliyorsa, hedef geçersiz belleğe başvuruda bulunur.
Hatalar:
- CS8374: Kaynağın başvuru ataması hedeften daha dar bir kaçış kapsamına sahip olamaz.
- CS9079: Kaynak yalnızca bir dönüş deyimi aracılığıyla geçerli yöntemden kaçabileceğinden, kaynağa başvurulamıyor.
- CS9096: Kaynak, hedeften daha geniş bir değer kaçış kapsamına sahip olduğundan kaynak, kaynaktan daha dar çıkış kapsamlarına sahip değerlerin hedefi üzerinden atamaya olanak sağladığından, kaynağa kaynak yeniden atanamaz.
Uyarı:
- CS9085: Bu başvuru kaynağı hedefe atar, ancak kaynağın çıkış kapsamı hedeften daha dardır.
- CS9093: Bu başvuru kaynağı hedefe atar, ancak kaynak yalnızca bir dönüş deyimi aracılığıyla geçerli yöntemden kaçabilir.
- CS9097: Bu başvuru kaynağı hedefe atar, ancak kaynak, kaynaktan daha dar çıkış kapsamlarına sahip değerlerin hedefi üzerinden atamaya izin veren hedeften daha geniş bir değer kaçış kapsamına sahiptir.
Bu hataları çözmek için:
- Kodunuzu yeniden yapılandırarak bir başvuru atamasında kaynak değişkenin en az hedef değişken kadar geniş bir kaçış kapsamına sahip olmasını sağlayın. Bu sayede hedef başvurunun tüm ömrü boyunca geçerli kalmasını sağlar ve sarkan başvuruları (CS8374, CS9085) önler.
- Bir değişken yalnızca bir return deyimi aracılığıyla yöntemden kaçabiliyorsa, bunu diğer yollarla erişilen değişkenlere
refatamayın. Örnekler arasında alanlarda depolama veya ref parametreleri aracılığıyla geri döndürme bulunmaktadır. Bu eylemler, kaynağın yalnızca dönüş deyimlerinde (CS9079, CS9093) kullanılabilmesi kısıtlamasını ihlal eder. - Değer kaçış kapsamları içeren başvuru atamaları için, kaynağın değer kaçış kapsamının hedefin kapsamından daha geniş olmadığından emin olun. Aksi takdirde, bu uyumsuzluk, hedef başvurusu aracılığıyla daha dar kapsamlı değerler atamanıza olanak tanır ve bu da geçici değerlere referanslar (CS9096, CS9097) oluşturmanıza neden olabilir.
Ref güvenliği kuralları hakkında daha fazla bilgi için ref iadeleri makalesine ve ref güvenli bağlamlar ile ilgili C# standardının ilgili bölümüne bakın.
Kaçış kapsamı ihlalleri ve koşullu işleçler
Derleyici, değişkenlerin çeşitli işlemler aracılığıyla bildirim kapsamından nasıl kaçabileceğini izler. Bu hatalar, başvurulan değişkenlerin geçerli yaşam süreleri dışında kullanıma açılabildiği, ref koşullu işleçleri ve stackalloc ifadeleri gibi bağlamlarda kullanılırken oluşur.
Hatalar:
-
CS8351: Koşullu işlecin dalları
refuyumsuz bildirim kapsamlarına sahip değişkenlere başvuramaz
Uyarı:
- CS9080: Bu bağlamda değişkenin kullanılması başvuruda bulunan değişkenleri bildirim kapsamı dışında kullanıma sunabilir
- CS9081: Bu bağlamda bir stackalloc ifadesinin sonucu, içeren yöntemin dışında ifşa edilebilir
- CS9086: Başvuru koşullu işlecinin dalları uyumsuz bildirim kapsamlarına sahip değişkenlere başvurur
Bu hataları çözmek için:
- Hem true hem de false dallarının uyumlu bildirim kapsamlarına sahip değişkenlere başvurması için başvuru koşullu işlecini (
?:döndüren işleçref) değiştirin; bu, her iki değişkenin de en az aynı kapsam düzeyine kadar uzanan yaşam sürelerine sahip olması gerektiği anlamına gelir ve koşullu ifadenin geçersiz hale gelen bir başvuru döndürmesini engeller (CS8351, CS9086). - İfadelerde veya yöntem çağrılarında değişkenleri kullanırken, bağlamın başvurulan değişkenlerin bildirim kapsamının dışına çıkmasına izin vermediğinden emin olun. Bu, genellikle kapsamı belirlenmiş değişkenleri yakalanabilecekleri veya hedeflenen yaşamlarının ötesinde depolanabilecekleri yöntemlere veya ifadelere geçirmekten kaçınma anlamına gelir (CS9080).
- Stackalloc ifadeleri için, sonucu değişkenlere atamaktan veya yığın tarafından ayrılan belleğe kapsayıcı yöntemin dışında erişilebilen bağlamlarda kullanmaktan kaçının, çünkü yöntem döndürdüğünde yığına ayrılan bellek otomatik olarak serbest bırakılır ve ardından tanımsız davranışla sonuçlanır (CS9081).
Daha fazla bilgi için başvuru iadeleri makalesine, bellek kullanımıyla ilgili makaleye ve başvuru güvenli bağlamlarıyla ilgili C# standart bölümüne bakın.
Yapı üyesi ve alan kısıtlamaları
Derleyici, artan referansları önlemek için alanlar ve yapı üyeleri için özel kurallar uygular. Yapı üyelerinin örnek durumuna başvuru döndürmesi veya alanların özel işleme ihtiyaç duyan türlere sahip olması durumunda bu hatalar meydana gelir.
Hatalar:
-
CS8345: Alan veya otomatik uygulanan özellik, bir
ref structörneğin üyesi olmadığı sürece türünde olamaz.
Uyarı:
- CS9082: Yerel, başvuru ile döndürülmek üzere ayarlandı ancak başvuru ile döndürülemeyecek bir değere başlatıldı
- CS9083: Bir üye başvuru tarafından döndürülür ancak başvuru tarafından döndürülemeyen bir değere başlatıldı
- CS9084: Yapı üyesi, başvuru ile 'this' veya diğer örnek üyelerini döndürüyor
Bu hataları çözmek için:
- Başvuru benzeri türler yalnızca yığında güvenli bir şekilde mevcut olabileceğinden ve başvuru yapıları gerekli yaşam süresi garantilerini (
Span<T>) sağladığından, başvuru benzeri türlerin (örneğinref structveya türleri) içeren alanların ve otomatik olarak uygulanan özelliklerin normal yapılar veya sınıflar yerine yalnızca bir başvuru yapısı içinde örnek üyeleri olarak bildirildiğinden emin olun. - Bir yöntemden başvuruyla yerel değişken döndürürken, yerel değişkenin kısa süreli depolamaya başvuru oluşturacak değer türündeki bir ifadeden veya yerel kapsamlı değişkenden (CS9082, CS9083) değil, başvuru parametresi veya başvuru döndüren yöntem çağrısı gibi yeterli çıkış kapsamına sahip bir kaynaktan başlatıldığını doğrulayın.
- Yapı örneği yöntemlerinde veya özelliklerinde, yapılar genellikle kopyalanan değer türleri olduğundan,
thisveya herhangi bir örnek alanını referans olarak döndürmekten kaçının; çünkü örnek üyesine başvuru döndürmek, yöntem döndürdükten sonra yok edilen geçici bir kopyaya başvuru oluşturabilir (CS9084).
Daha fazla bilgi için başvuru yapısı türleri makalesine ve başvurugüvenli bağlamlarıyla ilgili C# standart bölümüne bakın.