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şkenleriyle çalışırken aşağıdaki hatalar oluşturulabilir:
-
CS0192: Alan
readonlyveyarefdeğeri olarakoutkullanılamaz (oluşturucu dışında) -
CS0199: Alan
static readonlyveyarefoutdeğeri olarak kullanılamaz (statik oluşturucu dışında) -
CS0206: Başvuru döndürücü olmayan bir özellik veya dizin oluşturucu veya
outdeğerrefolarak kullanılamayabilir -
CS0631:
refveoutbu bağlamda geçerli değildir -
CS0767: Yöntemin yalnızca
refve üzerinde farklı aşırı yüklemeler içermesine neden olduğundan belirtilen tür parametrelerine sahip arabirim devralılamıyorout -
CS1510: A
refveyaoutdeğeri atanabilir bir değişken olmalıdır -
CS1605: Salt okunur olduğundan değişken veya
refdeğer olarakoutkullanılamaz -
CS1623: Yineleyicilerde ,
refveyainparametreleri olamazout -
CS1649: Bir
readonlyalanın üyeleri veyarefdeğeri olarakoutkullanılamaz (oluşturucu dışında) -
CS1651: Statik salt okunur alanın alanları veya
refdeğeri olarakoutkullanılamaz (statik oluşturucu dışında) -
CS1655: Veya
refdeğeri olarakouttür alanları kullanılamaz -
CS1657: Değişken veya
refdeğeri olarakoutkullanılamaz -
CS1741: Bir
refveyaoutparametresi varsayılan değere sahip olamaz -
CS1939: Aralık değişkeni veya
outrefparametresi olarak geçirilemiyor -
CS1988: Zaman uyumsuz yöntemlerin
refveyainoutparametreleri olamaz -
CS7084: Windows Çalışma Zamanı olayı veya
outparametresi olarakrefgeçirilmeyebilir. - CS8196: Örtük olarak yazılan bir değişkene başvuruya aynı bağımsız değişken listesinde izin verilmez.
-
CS8325: '
await' koşullu işleç içeren birrefifadede kullanılamaz - CS8326: Her iki koşullu işleç değeri de başvuru değeri olmalıdır veya ikisi de başvuru değeri olmayabilir
- CS8327: İfadenin alternatif başvuru değeriyle eşleşmesi için doğru türde olması gerekir
-
CS8329: Salt okunur bir
refdeğişken olduğundan değişken veyaoutdeğer olarak kullanılamaz -
CS8330: Salt okunur bir
refdeğişken olduğundan değişkenin üyeleri veyaoutdeğeri olarak kullanılamaz -
CS8331: Salt okunur bir
refdeğişken olduğundan değişken atanamaz veya atamanın sağ tarafı olarak kullanılamaz -
CS8332: Salt okunur bir değişken olduğundan değişkenin bir üyesine atanamaz veya atamanın
refsağ tarafı olarak kullanılamaz -
CS8337: '
ref' uzantı yönteminin ilk parametresi bir değer türü veya yapıyla kısıtlanmış genel bir tür olmalıdır. -
CS8338: Uzantı yönteminin ilk '
in' veya 'ref readonly' parametresi somut (genel olmayan) bir değer türü olmalıdır. -
CS8373: Atamanın
refsol tarafı bir başvuru değişkeni olmalıdır. -
CS8388: Değişken
out, başvuru yerel olarak bildirilemez -
CS8977: '
refinUnmanagedCallersOnly' ile ilişkilendirilen bir yöntemin imzasında '', '' veyaout'' kullanılamaz. - CS8986: Parametrenin 'kapsamlı' değiştiricisi hedefle eşleşmiyor.
- CS8987: Parametrenin 'scoped' değiştiricisi, geçersiz kılınan veya uygulanan üyeyle uyuşmuyor.
- CS9061: 'kapsamlı' değiştirici atma ile kullanılamaz.
- CS9062: Türler ve diğer adlar 'scoped' olarak adlandırılamaz.
- CS9063: UnscopedRefAttribute, varsayılan olarak kapsamı kaldırıldığı için bu parametreye uygulanamaz.
- CS9065: 'System.Runtime.CompilerServices.ScopedRefAttribute' kullanmayın. Bunun yerine 'scoped' anahtar sözcüğünü kullanın.
- CS9066: UnscopedRefAttribute, 'kapsamlı' değiştiricisi olan parametrelere uygulanamaz.
- CS9072: Bir derleme değişkeni, yerel başvuru olarak bildirilemez
- CS9101: UnscopedRefAttribute yalnızca yapı veya sanal arabirim örneği yöntemlerine ve özelliklerine uygulanabilir ve oluşturuculara veya yalnızca yerleşik üyelere uygulanamaz.
- CS9102: Uygulanan üyenin bu özniteliği olmadığından UnscopedRefAttribute bir arabirim uygulamasına uygulanamaz.
-
CS9104:
usingTüründe bir deyim kaynağı zaman uyumsuz yöntemlerde veya zaman uyumsuz lambda ifadelerinde kullanılamaz. -
CS9190:
readonlydeğiştirici sonrarefbelirtilmelidir. -
CS9199: Bir
ref readonlyparametre out özniteliğine sahip olamaz.
Başvuru değişkenleri yanlış kullanıldığında aşağıdaki uyarılar oluşturulur:
- CS9073: Parametrenin 'kapsamlı' değiştiricisi hedefle eşleşmiyor.
- CS9074: Parametrenin 'kapsamlı' değiştiricisi geçersiz kılınan veya uygulanan üyeyle eşleşmiyor.
-
CS9191:
refParametresineinkarşılık gelen bağımsız değişkenin değiştiricisi ileineşdeğerdir. Bunun yerine kullanmayıingöz önünde bulundurun. -
CS9192: Bağımsız değişken veya
refanahtar sözcüğüyleingeçirilmelidir. -
CS9193: Bağımsız değişken bir parametreye geçirildiğinden değişken
ref readonlyolmalıdır -
CS9195: Bağımsız değişken anahtar sözcüğüyle
ingeçirilmelidir - CS9196: Parametrenin başvuru türü değiştiricisi geçersiz kılınmış veya uygulanan üyede karşılık gelen parametreyle eşleşmiyor.
- CS9197: Parametrenin başvuru türü değiştiricisi, gizli üyedeki ilgili parametreyle eşleşmiyor.
- CS9198: Parametrenin başvuru türü değiştiricisi hedefteki ilgili parametreyle eşleşmiyor.
-
CS9200: Parametre için
ref readonlyvarsayılan bir değer belirtilir, ancakref readonlyyalnızca başvurular için kullanılmalıdır. parametresini olarakinbildirmeyi göz önünde bulundurun. - CS9201: Başvuru alanı kullanımdan önce başvuru olarak atanmalıdır.
- CS9265: Alan hiçbir zaman başvuruya atanmamıştır ve her zaman varsayılan değerine (null başvurusu) sahip olur
Bu hatalar ve uyarılar şu temalara uyar:
- Yanlış söz dizimi: Bildiriminizin veya kullanımınızın söz dizimi geçersiz.
-
refolmadığı dil yapıları: Bazı C# deyimleri değişkenlere izin vermez. Bunun nedeni genellikle başvuru güvenliği analizinin güvenilir bir şekilde yapılamadığıdır. - Başvuru değişkeninin gerekli olduğu yerde kullanılan değer ifadesi: Başvuru değişkeni olarak kullanılan ifade değer ifadesi değil değişken olmalıdır.
- Salt okunur değişkenlere başvuran yazılabilir başvuru değişkenleri: Salt okunur bir değişkene başvuru yazılabilir başvuru tarafından geçirilemez.
Bu makalede, , , inveya değiştiricilerinden biriyle ref readonlyya da yerel değişken, içindeki bir alan refoutveya ref bir dönüşle bildirilen bir ref parametre için genel terim olarak başvuru değişkeni ref structrefkullanılır. Başvuru değişkeni, başvuran olarak adlandırılan başka bir değişkene başvurur.
Hatalı söz dizimi
Bu hatalar, başvuru değişkenleriyle ilgili yanlış söz dizimi kullandığınızı gösterir:
-
CS8373: Atamanın
refsol tarafı bir başvuru değişkeni olmalıdır. -
CS8388: Değişken
out, başvuru yerel olarak bildirilemez. -
CS9190:
readonlydeğiştirici sonrarefbelirtilmelidir.
Bu hataları düzeltmek için:
- Bir
= refişlecin sol işleneninin bir değer ifade veya başvuru olmayan yerel değişken yerine bir başvuru değişkeni olduğundan emin olun. Ref ataması, her iki tarafın da aynı depolama konumuna (CS8373) bir alias oluşturabilen ref değişkenleri olmasını gerektirir. - Başvuru parametrelerini bildirirken, değiştiriciyi
ref readonlyyerinereadonly refolarak yazın. C# dil belirtimi, tüm başvuru parametre türlerinde tutarlı bir söz dizimini korumak için, parametre bildirimlerinderefdeğiştiricisinden öncereadonlyanahtar sözcüğünün bulunmasını gerektirir (CS9190). -
refYerel başvuru değişkenlerini bildirirken yerineoutanahtar sözcüğünü kullanın.outyalnızca bir yöntemin döndürmeden önce bir değer ataması gerektiğini belirten bir parametre değiştiricidir, ancakrefdiğer depolama konumlarını (CS8388) diğer adla kullanan yerel değişkenler oluşturmak için uygun anahtar sözcüktür. Başvuru değişkenleri ve söz dizimi gereksinimleri hakkında daha fazla bilgi için bkz. başvuru değişkenleri ve C# Dil Belirtimi.
Başvuru değişkeni kısıtlamaları
Aşağıdaki hatalar, bir başvuru değişkeninin bir başvuru değişkeniniz olduğu yerde kullanılamadığını gösterir:
-
CS0631:
refveoutbu bağlamda geçerli değildir -
CS0767: Yöntemin yalnızca
refve üzerinde farklı aşırı yüklemeler içermesine neden olduğundan belirtilen tür parametrelerine sahip arabirim devralılamıyorout -
CS1623: Yineleyicilerde ,
refveyainparametreleri olamazout -
CS1741: Bir
refveyaoutparametresi varsayılan değere sahip olamaz -
CS1939: Aralık değişkeni veya
outrefparametresi olarak geçirilemiyor -
CS1988: Zaman uyumsuz yöntemlerin
refveyainoutparametreleri olamaz -
CS7084: Windows Çalışma Zamanı olayı veya
outparametresi olarakrefgeçirilmeyebilir. -
CS8196: Örtük olarak türü belirlenmiş
outbir değişkene başvuruya aynı bağımsız değişken listesinde izin verilmez. -
CS8325: 'await' koşullu işleç içeren bir
refifadede kullanılamaz - CS8326: Her iki koşullu işleç değeri de başvuru değeri olmalıdır veya ikisi de başvuru değeri olmayabilir
- CS8327: İfadenin alternatif başvuru değeriyle eşleşmesi için doğru türde olması gerekir
-
CS8337: '
ref' uzantı yönteminin ilk parametresi bir değer türü veya yapıyla kısıtlanmış genel bir tür olmalıdır. -
CS8338: Uzantı yönteminin ilk '
in' veya 'ref readonly' parametresi somut (genel olmayan) bir değer türü olmalıdır. -
CS8977: '
refinUnmanagedCallersOnly' ile ilişkilendirilen bir yöntemin imzasında '', '' veyaout'' kullanılamaz. - CS9072: Bir derleme değişkeni, yerel başvuru olarak bildirilemez
-
CS9104:
usingTüründe bir deyim kaynağı zaman uyumsuz yöntemlerde veya zaman uyumsuz lambda ifadelerinde kullanılamaz. -
CS9199: Bir
ref readonlyparametre out özniteliğine sahip olamaz.
Aşağıdaki uyarılar bir başvuru değişkeninin kullanılmaması gerektiğini ve güvenli olmayabileceğini gösterir:
- CS9196: Parametrenin başvuru türü değiştiricisi geçersiz kılınmış veya uygulanan üyede karşılık gelen parametreyle eşleşmiyor.
- CS9197: Parametrenin başvuru türü değiştiricisi, gizli üyedeki ilgili parametreyle eşleşmiyor.
- CS9198: Parametrenin başvuru türü değiştiricisi hedefteki ilgili parametreyle eşleşmiyor.
-
CS9200: Parametre için
ref readonlyvarsayılan bir değer belirtilir, ancakref readonlyyalnızca başvurular için kullanılmalıdır. parametresini olarakinbildirmeyi göz önünde bulundurun. - CS9201: Başvuru alanı kullanımdan önce başvuru olarak atanmalıdır.
- CS9265: Alan hiçbir zaman başvuruya atanmamıştır ve her zaman varsayılan değerine (null başvurusu) sahip olur
Bu hataları düzeltmek için:
- Dizin oluşturuculardan başvuru parametrelerini kaldırın. İndeksleyiciler, dizi benzeri erişim söz dizimi sağlamak için tasarlanmıştır ve derleyici, indeksleyici erişimcileri (CS0631, CS1623) aracılığıyla aktarılan referansların güvenli yaşam süresini izlemeyi garanti edemez.
- Yineleyici yöntemlerinden başvuru parametrelerini kaldırın. Yineleyiciler, durum makinelerini kullanarak birden çok çağrıda kodu gizli olarak yürütür ve derleyici, yürütmenin askıya alındığı ve sürdürüldüğü verim dönüş sınırları boyunca başvuruda bulunılan değişkenlerin geçerli kalmasını sağlayamaz (CS1623).
- Asenkron yöntemlerden başvuru parametrelerini kaldırın. Zaman uyumsuz yöntemler, bekleme noktalarında yürütmeyi askıya alabilir ve farklı iş parçacıklarında sürdürebilir, bu da başvuruda bulunılan değişkenlerin yöntemin yürütülmesi (CS1988) boyunca geçerli ve erişilebilir kalmasını garanti etmek mümkün değildir.
- Await ifadelerini ref koşullu ifadeler içinde kullanmaktan kaçının. Await işlemi, koşullu operatör aracılığıyla seçilen referansları geçersiz kılarak işlemin yürütülmesini askıya alabilir ve yürütme devam ettiğinde geçersiz kılınmış referansların olası kullanımına neden olabilir (CS8325).
- Ref koşullu operatörün her iki dalının da referans döndürdüğünden veya hiçbirinin de referans döndürmediğinden ve her ikisi de referans olduğunda aynı türde olmaları gerektiğinden emin olun. Koşullu işleç, hangi dal seçildiğinden bağımsız olarak çağıran kod tarafından güvenli bir şekilde kullanılabilecek tutarlı bir sonuç türü üretmelidir (CS8326, CS8327).
-
refveoutparametrelerinden varsayılan değerleri kaldırın. Parametre ile var olan bir değişken arasında gerekli diğer ad ilişkisini kurmak ve varsayılan değerleri anlamsal olarak anlamsız hale getirmek için başvuru parametreleri her zaman çağrı sitesinde sağlanmalıdır (CS1741). - Aynı değişkene de başvuran bağımsız değişken listesinde örtük olarak yazılan
outbir değişken bildirmekten kaçının. Derleyici, aynı ifade içindeki değişkenin kullanımlarını eşzamanlı olarak doğrulayarak döngüsel bağımlılık (CS8196) oluştururken değişkenin türünü yöntem imzasından çıkarmalıdır. - LINQ sorgu aralığı değişkenlerini başvuru parametresi olarak geçirmeyin. Aralık değişkenleri, ömrü sorgu yürütme modeli tarafından yönetilen ve güvenli bir şekilde başvurulabilen kararlı bellek konumlarına sahip olmayan derleyici tarafından oluşturulan yineleme değişkenleridir (CS1939).
- Nesneleri oluştururken başvuru yerel değerleri yerine normal değer değişkenlerini kullanın. Yapı bozma, yapı bozulan değerleri almak için yeni değişkenler oluşturur ve referans değişkenleri bu geçici değerleri bağımsız olarak depolamak yerine bu değerlere diğer adlar vermeyi dener (CS9072).
- Parametrelerdeki
refveoutdeğiştiricilerine göre farklılık gösteren yöntemlere sahip birden çok arabirimi uygulamaktan kaçının. C# dilinin spesifikasyonu, bunları farklı imzalar olarak ele alır, ancak hemrefhem deoutuygulama sınırlarında aynı çağrı söz dizimini paylaştıkları için hangi uygulamanın çağrılacağını ayırt edecek bir yol sağlamaz (CS0767). - ile System.Runtime.InteropServices.UnmanagedCallersOnlyAttributedekore edilmiş yöntemlerden başvuru parametrelerini kaldırın. Bu yöntemler, C# başvuru güvenlik kurallarını anlamayan yönetilmeyen koddan çağrılır ve yönetilen/yönetilmeyen sınır (CS8977) genelinde başvurulan değişkenlerin uygun yaşam süresi yönetimini garanti etmez.
-
refdeğiştiricisini yalnızca uzantı yönteminin ilk parametrelerinde, değer türleri veya değer türleriyle kısıtlanmış genel türler için kullanın. Başvuru türleri CLR düzeyinde zaten başvuruyla geçmektedir verefeklemek, bir başvuruya referans oluşturur;refile yapılan değer türü uzantıları ise genişletilmiş örneğin mutasyonunu sağlar (CS8337, CS8338). - Windows Çalışma Zamanı olaylarını başvuru parametresi olarak geçirmeyin. Bu olaylar, .NET referanslarından farklı ömür döngüsü ve iş parçacığı yönetimi semantiğine sahip olan ve C# başvuru parametrelerinin (CS7084) gerektirdiği takma adlama davranışını desteklemeyen Windows Çalışma Zamanı tür sistemiyle uyumludur.
- parametrelerinden System.Runtime.InteropServices.OutAttribute'yı
ref readonlykaldırın. Bu öznitelik, parametre yönünün yalnızca giden olduğu platform çağırma senaryolarında semantiği sıralamak için tasarlanmıştır ve bu senaryolar, parametrenin yeniden atanamayacak mevcut verilere başvurduğu garantisiyle (ref readonly) çakışır. - Bir türdeki tüm
refalanların, oluşturucu tamamlanmadan önce alan başlatıcılarda veya tüm oluşturucu kod yollarında atandığından emin olun. Başlatılmamış başvuru alanları, erişilirse bellek bozulmasına neden olabilecek geçersiz başvurular içerebilir (CS9201, CS9265). - Geçersiz kılınan temel metot veya uygulanan arayüz metot ile bir metot arasındaki başvuru türü değiştiricilerini (
ref,in,out,ref readonly) eşleştirin. Referans değiştirici, türetilmiş türlerin yedeklenebilirlik ve çağıranların beklentilerini (CS9196, CS9197, CS9198) korumak için yerine getirmesi gereken yöntem imzası sözleşmesinin bir parçasıdır. - Varsayılan değerler sağlıyorsanız parametreleri
inyerineref readonlyolarak bildirin.ref readonly, çağıranın var olan bir değişkene başvuru geçirdiği senaryolar için tasarlanmıştır, ancakinparametreler değerlerin hem başvurularını hem de geçici kopyalarını kabul ederek varsayılan değerleri anlamlı hale getirir (CS9200).
Başvuru değişkenlerine nerede izin verileceği hakkında daha fazla bilgi için bkz. Yöntem parametreleri, Yineleyiciler, Zaman Uyumsuz programlama desenleri ve C# Dil Belirtimi.
unscoped ref Kısıtlama -ları
unscoped Bazı konumlarda parametrelerdeki ref niteleyiciye izin verilmez:
- CS9101: UnscopedRefAttribute yalnızca yapı örneğine veya sanal arabirim yöntemlerine ve özelliklerine uygulanabilir ve oluşturuculara veya yalnızca yerleşik üyelere uygulanamaz.
- CS9102: Uygulanan üyenin bu özniteliği olmadığından UnscopedRefAttribute bir arabirim uygulamasına uygulanamaz.
Bu hataları düzeltmek için:
- Değiştiriciyi
unscopedveya System.Diagnostics.CodeAnalysis.UnscopedRefAttribute özniteliğini yapı oluşturucularından ve yalnızca başlatma üyelerinden kaldırın. Bu üyeler, derleyicinin herhangi bir başvurunun başlatma aşamasını aşmadığından emin olması gereken özel başlatma semantiğine sahiptir ve kapsam dışı başvurulara izin vermek, yapının tam olarak erişilebilir hale gelmesinden önce başlatmanın tamamlanmasının garantisini ihlal eder (CS9101). -
unscopedkarşılık gelen arabirim yöntemine sahip olmadığında, değiştiriciyi arabirim uygulama yöntemlerinden kaldırın. Kapsamsız özellik, yöntemin başvuru ömrü garantileriyle ilgili sözleşmesini etkiler ve uygulamalar, çağıranların hangi uygulamanın çağrıldığından bağımsız olarak tutarlı yaşam süresi davranışına güvenebilmesi için uyguladıkları arabirimle aynı sözleşmeyi sürdürmelidir (CS9102).
Kapsamlı ve kapsam dışı referanslar hakkında daha fazla bilgi için Yöntem parametreleri ve düşük seviyeli yapı iyileştirmeleri özellik tanımına bakın.
Başvuru değişkenleri için başvuruda bulunmak gerekir
Bir değişkeni başvuru parametresine, başvuru dönüşüne veya başvuru yerel atamasına bağımsız değişken olarak sağlamanız gerekir:
-
CS0206: Başvuru döndürücü olmayan bir özellik veya dizin oluşturucu veya
outdeğerrefolarak kullanılamayabilir -
CS1510: A
refveyaoutdeğeri atanabilir bir değişken olmalıdır
Uyarı:
-
CS9191:
refParametresineinkarşılık gelen bağımsız değişkenin değiştiricisi ileineşdeğerdir. Bunun yerine kullanmayıingöz önünde bulundurun. -
CS9192: Bağımsız değişken veya
refanahtar sözcüğüyleingeçirilmelidir. -
CS9193: Bağımsız değişken bir parametreye geçirildiğinden değişken
ref readonlyolmalıdır -
CS9195: Bağımsız değişken anahtar sözcüğüyle
ingeçirilmelidir
Bu hataları düzeltmek için:
- Bir özelliğin veya dizin oluşturucu erişiminin sonucunu, bir başvuru parametresi olarak geçirmeden önce yerel değişkende depolayın. Özellikler ve dizin oluşturucular , depolama konumlarına doğrudan erişim sağlamak yerine değer döndüren yöntemlerdir ve başvuru parametreleri diğer adla alınabilen kararlı bir bellek konumuna sahip gerçek bir değişken gerektirir (CS0206, CS1510).
- Parametrelere bağımsız değişkenler geçirirken
inyerinerefdeğiştiricisini kullanın.refgeriye dönük uyumluluk nedeniyle teknik olarak çalışmasına rağmen,indeğiştirici, bağımsız değişkenin salt okunur olduğunu ve kopyalamadan referans olarak daha verimli şekilde iletilebileceğini daha net bir şekilde ifade eder (CS9191, CS9195). - Referans bekleyen parametrelere bağımsız değişkenleri geçirirken uygun referans değiştiriciyi (
ref,inveyaref readonly) ekleyin. Değiştiricinin atlanması derleyicinin değerin geçici bir kopyasını oluşturmasına neden olabilir; bu verimsizdir ve çağıran kod değişikliklerin özgün değişkene yansıtılması bekleniyorsa beklenmeyen davranışlara yol açabilir (CS9192, CS9193).
Başvuru parametreleri ve başvuruya göre değişkenleri geçirme hakkında daha fazla bilgi için bkz. Yöntem parametreleri, ref anahtar sözcüğü ve C# Dil Belirtimi.
Yazılabilir başvuru değişkenleri yazılabilir bir başvuru gerektirir
Yazılabilir başvuru değişkeni, başvuranın da yazılabilir olmasını gerektirir. Aşağıdaki hatalar değişkenin yazılabilir olmadığını gösterir:
-
CS0192: Alan
readonlyveyarefdeğeri olarakoutkullanılamaz (oluşturucu dışında) -
CS0199: Alan
static readonlyveyarefoutdeğeri olarak kullanılamaz (statik oluşturucu dışında) -
CS1605: Salt okunur olduğundan değişken veya
refdeğer olarakoutkullanılamaz -
CS1649: Bir
readonlyalanın üyeleri veyarefdeğeri olarakoutkullanılamaz (oluşturucu dışında) -
CS1651: Bir alanın alanları
static readonlyveyarefdeğeri olarakoutkullanılamaz (statik oluşturucu dışında) -
CS1655: Veya
refdeğeri olarakouttür alanları kullanılamaz -
CS1657: Değişken veya
refdeğeri olarakoutkullanılamaz -
CS8329: Salt okunur bir
refdeğişken olduğundan değişken veyaoutdeğer olarak kullanılamaz -
CS8330: Salt okunur bir
refdeğişken olduğundan değişkenin üyeleri veyaoutdeğeri olarak kullanılamaz -
CS8331: Salt okunur bir
refdeğişken olduğundan değişken atanamaz veya atamanın sağ tarafı olarak kullanılamaz -
CS8332: Salt okunur bir değişken olduğundan değişkenin bir üyesine atanamaz veya atamanın
refsağ tarafı olarak kullanılamaz
Bu hataları düzeltmek için:
-
Salt okunur bir alandaki değeri bir yerel değişkene kopyalayın ve bu yerel değişkeni
refveyaoutparametresi olarak geçirin. Salt okunur alanlar başlatmadan sonra sabittir (oluşturucular dışında) ve bunlara yazılabilir başvurulara izin vermek, salt okunur olarak sağladığı değişmezlik garantisini ihlal eder (CS0192, CS0199, CS1649, CS1651). -
ref readonlyveyainparametrelerini, salt okunur değişkenleri, yineleme değişkenlerini veya başka yazılamayan değerleri başvuruya göre geçirmeniz gerektiğinderefveyaoutparametreleri yerine kullanın. Bu değiştiriciler yöntemin, değiştirme girişiminde bulunmadan yalnızca başvuruda bulunan değeri okuyacağını gösterir. Bu, özgün değişkenin (CS1605, CS1655, CS1657, CS8329) değişmezlik kısıtlamalarıyla uyumlu hale geliyor. - Salt okunur olan değişkenlerin üyelerini yazılabilir başvurular olarak iletmeden önce yerel değişkenlere kopyalayın. Üyenin kendisi salt okunur olarak bildirilmese de, salt okunur bir yol üzerinden (salt okunur bir alan,
inparametre veyaref readonlyyerel) erişilir ve derleyici salt okunur verilerin dolaylı mutasyonunu (CS8330, CS8332) önlemek için salt okunurluğun geçişini zorlar. - Salt okunur değişkenlere, foreach döngüsü değişkenlerine, using ifadesi kaynaklarına veya fixed ifadesi değişkenlerine yazılabilir başvuru atamalarından kaçının. Bu değişkenler, derleyici tarafından yönetilen özel yaşam süresi semantiğine sahiptir. Değişken, kapsamının sonunda otomatik olarak tamamlanır veya yok edilir. Dış referanslar, elden çıkarmadan sonra sarkan referanslar oluşturur (CS8331).
Salt okunur semantikler ve başvuru parametreleri hakkında daha fazla bilgi için bkz. readonly anahtar sözcüğü, in parametre değiştiricisi, ref readonly ve C# Dil Belirtimi.