Oluşturucu bildirimleri ve modül başlatıcıları için hataları ve uyarıları düzeltme

Bu makale aşağıdaki derleyici hatalarını kapsar:

  • CS0132: 'constructor': statik oluşturucu parametresiz olmalıdır.
  • cs0514: statik oluşturucu açık bir 'this' veya 'base' oluşturucu çağrısına sahip olamaz.
  • CS0515: statik oluşturucularda erişim değiştiricilerine izin verilmez.
  • CS0516: Oluşturucu 'oluşturucu' kendisini çağıramaz.
  • CS0517: 'sınıf' temel sınıfı yoktur ve bir temel oluşturucuyu çağıramaz.
  • CS0522: yapıları temel sınıf oluşturucularını çağıramaz.
  • CS0526: Arayüzler örnek oluşturucu içeremez.
  • CS0568: Yapıları açık parametresiz oluşturucular içeremez.
  • CS0573: 'alan bildirimi': yapılarda örnek alanı başlatıcıları olamaz.
  • CS0710: Statik sınıfların örnek oluşturucuları olamaz.
  • CS0768: Oluşturucu başka bir oluşturucu aracılığıyla kendisini çağıramaz.
  • CS1018: Anahtar kelime 'this' veya 'base' bekleniyor.
  • CS8054: Enumlar parametresiz açık oluşturucular içeremez.
  • CS8091: dış olamaz ve oluşturucu başlatıcısına sahip olamaz.
  • CS8760: 'event': extern olay başlatıcıya sahip olamaz.
  • CS8358: 'in' veya 'ref readonly' parametreleri olduğundan öznitelik oluşturucu kullanılamaz.
  • CS8813: Modül başlatıcı sıradan bir üye yöntemi olmalıdır
  • CS8814: Modül başlatıcı yöntemi 'method' modül düzeyinde erişilebilir olmalıdır
  • CS8815: 'method' modül başlatıcı yöntemi statik olmalı ve sanal olmayan bir parametre içermeli ve 'void' döndürmelidir
  • CS8816: 'method' modül başlatıcı yöntemi genel olmamalıdır ve genel bir türde bulunmamalıdır
  • CS8861: Beklenmeyen bağımsız değişken listesi.
  • CS8862: Parametre listesi olan bir türde bildirilen bir yapıcı 'this' yapıcı başlatıcısına sahip olmalıdır.
  • CS8867: '{0}' temel türünde erişilebilir kopya oluşturucu bulunamadı.
  • CS8868: Kayıttaki bir kopya oluşturucu, tabanın kopya oluşturucusunu veya kayıt nesneden devralıyorsa parametresiz nesne oluşturucuyu çağırmalıdır.
  • CS8878: Kayıt korumalı olmadığından '{0}' kopya oluşturucusunun ortak veya korumalı olması gerekir.
  • CS8900: Modül başlatıcı 'UnmanagedCallersOnly' ile ilişkilendirilemez.
  • CS8901: 'method', 'UnmanagedCallersOnly' ile ilişkilendirilir ve doğrudan çağrılamaz. Bu yönteme bir işlev işaretçisi alın.
  • CS8902: 'method', 'UnmanagedCallersOnly' ile ilişkilendirilir ve temsilci türüne dönüştürülemez. Bu yönteme bir işlev işaretçisi alın.
  • CS8910: Birincil yapıcı sentezlenmiş kopya yapıcıyla çatışır.
  • cs8958: Parametresiz yapı oluşturucu 'public' olmalıdır.
  • CS8982: Parametre listesiyle 'yapı' içinde bildirilen bir oluşturucunun birincil oluşturucuyu veya açıkça bildirilen bir oluşturucuyu çağıran bir 'this' başlatıcısı olmalıdır.
  • CS8983: Alan başlatıcıları olan bir 'yapı' açıkça bildirilen bir oluşturucu içermelidir.
  • CS9105: Bu bağlamda birincil oluşturucu parametresi kullanılamaz.
  • CS9106: Tanımlayıcı, bu bağlamda tür ve parametre arasında belirsizdir.
  • CS9108: Anonim bir yöntem, lambda ifadesi, sorgu ifadesi veya yerel işlev içinde başvuru benzeri türe sahip parametre kullanılamaz.
  • CS9109: Örnek üyesi içinde ref, outveya in birincil oluşturucu parametresi kullanılamaz.
  • CS9110: Örnek üyesi içinde ref benzeri türe sahip birincil yapıcı parametresi kullanılamaz.
  • CS9111: Anonim yöntemler, lambda ifadeleri, sorgu ifadeleri ve bir yapının örnek üyesi içindeki yerel işlevler birincil oluşturucu parametresine erişemez.
  • CS9112: Anonim yöntemler, lambda ifadeleri, sorgu ifadeleri ve yapı içindeki yerel işlevler, örnek üyesi içinde de kullanılan birincil oluşturucu parametresine erişemez.
  • CS9114: Salt okunur bir türün birincil oluşturucu parametresine, türün yalnızca başlatma için ayarlayıcısında veya bir değişken başlatıcısında olması durumu hariç, bir değer atanamaz.
  • CS9115: Salt okunur bir türün birincil oluşturucu parametresi yazılabilir bir başvuru olarak döndürülemez.
  • CS9116: Salt okunur bir türün birincil oluşturucu parametresi, referans veya out değeri olarak kullanılamaz (türün sadece başlatıcı ayarlayıcısında veya bir değişken başlatıcısında hariç).
  • CS9117: Salt okunur bir türün birincil oluşturucu parametre üyeleri değiştirilemez (bunlar yalnızca türün init-only ayarlayıcısı veya bir değişken başlatıcısında değiştirilebilir).
  • CS9118: Salt okunur bir türün birincil oluşturucu parametresinin üyeleri yazılabilir başvuru tarafından döndürülemez.
  • CS9119: Salt okunur bir türün birincil oluşturucu parametresinin üyeleri ref veya out değeri olarak kullanılamaz (türün yalnızca başlatma ayarlayıcısı veya değişken başlatıcı hariç).
  • CS9120: Başvuruyla birincil oluşturucu parametresi döndürülemiyor.
  • cs9121: yapı birincil oluşturucu türü parametresi yapı düzeninde bir döngüye neden olur.
  • CS9122: Beklenmeyen parametre listesi.
  • CS9136: Bir örnek üyesi içinde birincil oluşturucuya ait parametre kullanılamaz.

Ayrıca, bu makalede aşağıdaki uyarılar ele alınmıştır:

  • CS0824: Oluşturucu 'name' dış olarak işaretlenir.
  • CS9107: Parametre, kapsayıcı türün durumuna alınır ve değeri de temel oluşturucuya iletilir. Değer, temel sınıf tarafından da yakalanabilir.
  • CS9113: Parametresi okunmadı.
  • CS9124: Parametresi kapsayan türün durumuna aktarılır ve değeri bir alanı, özelliği veya olayı başlatmak amacıyla da kullanılır.
  • CS9179: Birincil oluşturucu parametresi temel bir üye tarafından gölgelendi
  • CS9018: Otomatik uygulanan özellik açıkça atanmadan önce okunur ve 'default' öğesinin önceden örtük atamasına neden olur.
  • CS9019: Alan açıkça atanmadan önce okunur ve bu da 'default' öğesinin örtük atamasına neden olur.
  • CS9020: 'This' nesnesi, tüm alanları atanamadan önce okunuyor, bu da açıkça atanmamış alanlarda 'default' değerlerinin önceki örtük atamalarına yol açıyor.
  • CS9021: Otomatik uygulanan özellik açıkça atanmadan önce denetim çağırana döndürülür ve bu da 'default' öğesinin örtük atamasına neden olur.
  • CS9022: Alan açıkça atanmadan önce denetim çağırana döndürülür ve bu da 'default' öğesinin önceden örtük atamasına neden olur.

Statik oluşturucular

  • CS0132: 'constructor': statik oluşturucu parametresiz olmalıdır.
  • CS0514: Statik oluşturucu açık bir 'this' veya 'base' oluşturucu çağrısına sahip olamaz.
  • CS0515: Statik oluşturucularda Erişim değiştiricilerine izin verilmez.

Statik oluşturucular bir tür için statik verileri başlatır. Daha fazla bilgi için bkz . Statik oluşturucular.

Bu hataları düzeltmek için statik oluşturucu bildiriminizin şu kurallara uydığından emin olun:

  • Statik oluşturucu parametresiz (CS0132) olması gerektiğinden, statik oluşturucu bildiriminden tüm parametreleri kaldırın. Başlatma değerlerini geçirmeniz gerekiyorsa, statik oluşturucu çalışmadan önce ayarladığınız statik alanları veya özellikleri kullanmayı göz önünde bulundurun.
  • Statik oluşturucunun, çalışma zamanının ne zaman çalıştırılacağını denetlediği ve erişim değiştiricileri anlamlı olmadığı için public, protected, private veya internal gibi tüm erişim değiştiricilerini statik oluşturucudan kaldırın (CS0515).
  • Statik oluşturucular diğer oluşturuculara zincirleme yapamayacağından (: base()), statik oluşturucuda yer alan : this() veya başlatıcı çağrılarını kaldırın. Çalışma zamanı, varsa temel sınıf statik oluşturucuyu otomatik olarak çağırır.

Oluşturucu bildirimi

  • CS0526: Arayüzler örnek oluşturucuları içeremez.
  • CS0710: Statik sınıfların örnek oluşturucuları olamaz.
  • CS8054: Enum'lar açık parametresiz oluşturucular içeremez.
  • CS8358: 'in' veya 'ref readonly' parametreleri olduğundan öznitelik oluşturucu kullanılamaz.
  • CS8091: Bir oluşturucu hem extern olamaz hem de bir oluşturucu başlatıcısına sahip olamaz.
  • CS8760: 'event': extern olay başlatıcı içeremez.

Oluşturucuları yalnızca class ve struct türlerinde bildirebilirsiniz, record class ve record struct türleri dahil. Daha fazla bilgi için bkz . Örnek oluşturucuları.

Bu hataları düzeltmek için aşağıdaki önerileri deneyin:

  • oluşturucuyu class veya struct türlerine taşıyın, çünkü interface veya enum türlerinde oluşturucular bildirilmez (CS0526, CS8054). Arabirimler (interface) kullanım sözleşmelerini tanımlar ancak başlatma mantığını sağlamaz ve numaralandırma türlerinin sabit değerleri derleme zamanında tanımlanmıştır.
  • Statik sınıflar örneği oluşturulamadığından ve bu nedenle örnek oluşturucuları (CS0710) olmadığından, örnek oluşturucularını statik sınıflardan kaldırın. Başlatma mantığına ihtiyacınız varsa, bunun yerine statik bir oluşturucu kullanın.
  • Öznitelik oluşturucuları in veya ref readonly parametre değiştiricilerini (in) desteklemediğinden, ref readonly veya parametrelerini değere göre geçen parametreler olarak değiştirin. Çalışma zamanı, in veya ref readonly değiştiricisini desteklemeyen yansıma kullanarak özniteliklerin örneğini oluşturur.
  • Oluşturucu başlatıcısını : base() veya : this()extern oluşturucudan kaldırın, çünkü dışsal oluşturucular diğer oluşturuculara (CS8091) bağlanamaz. Bir extern oluşturucunun uygulanması dışarıdan sağlanır, bu nedenle oluşturucu zincirleme mümkün değildir.
  • Başlatıcıyı bir extern olay bildiriminden (CS8760) kaldırın. Extern olayların ekleme ve kaldırma erişimcileri dış kod tarafından sağlandığından, kaynakta yer alan alan başlatıcısının hiçbir etkisi yoktur ve derleyici buna izin vermez.

Oluşturucu bildirimleri için aşağıdaki uyarı oluşturulabilir:

  • CS0824: Oluşturucu harici olarak işaretlenmiştir.

Bir oluşturucu işaretlendiğinde extern, derleyici bir uygulamanın mevcut olduğunu doğrulayamaz. Bu uyarıyı engellemek için, extern olmayan bir uygulama sağlayın veya dış uygulamanın doğru şekilde bağlandığından emin olun.

Yapı türlerindeki oluşturucular

  • CS0568: Yapıları açık parametresiz oluşturucular içeremez.
  • CS0573: 'alan bildirimi': yapılarda örnek alanı başlatıcıları olamaz.
  • CS8958: Parametresiz yapı oluşturucu 'public' olmalıdır.
  • CS8982: Parametre listesiyle 'yapı' içinde bildirilen bir oluşturucunun birincil oluşturucuyu veya açıkça bildirilen bir oluşturucuyu çağıran bir 'this' başlatıcısı olmalıdır.
  • CS8983: Alan başlatıcıları olan bir 'yapı' açıkça bildirilen bir oluşturucu içermelidir.

Yapı türlerinin oluşturucular ve alan başlatma için belirli kuralları vardır. Daha fazla bilgi için Yapı türleri makalesinin Yapı başlatma ve varsayılan değerler bölümüne bakın.

Bu hataları düzeltmek için aşağıdaki önerileri deneyin:

  • CS0568 veya CS0573 ile karşılaşırsanız C# 10 veya sonraki bir sürüme yükseltin, çünkü bu hatalar yalnızca C# 'nin eski sürümlerinde oluşur. Modern C# yapılarda açık parametresiz oluşturuculara ve alan başlatıcılara izin verir.
  • Parametresiz yapı oluşturucularının public ifadesi ve dizi tahsisi yoluyla yapı örneklerini düzgün bir şekilde başlatabilmesi için genel olması gerektiğinden, default erişim değiştiricisini parametresiz yapı oluşturucularına ekleyin (CS8958).
  • : this(...) Birincil oluşturucuya sahip bir yapıda açıkça bildirilen oluşturucular için başlatıcı ekleyin, çünkü tüm parametresiz oluşturucuların tutarlı başlatmayı (CS8982) sağlamak için birincil oluşturucuya veya açıkça bildirilen başka bir oluşturucuya zincirleme yapması gerekir.
  • Yapınız alan başlatıcıları kullandığında açık bir oluşturucu bildirin çünkü derleyici, alan başlatıcılarının çağrıldığından emin olmak için açık bir oluşturucu gerektirir (CS8983). Bu oluşturucu, boş bir gövdeye sahip parametresiz bir oluşturucu olabilir.

Aşağıdaki uyarılar, bir alanın veya özelliğin, okunmadan veya kontrol geri çağırana dönmeden önce açıkça atanmadığını gösterir.

  • CS9018: Otomatik uygulanan özellik açıkça atanmadan önce okunur ve 'default' öğesinin önceden örtük atamasına neden olur.
  • CS9019: Alan açıkça atanmadan önce okunur ve bu da 'default' öğesinin örtük atamasına neden olur.
  • CS9020: 'This' nesnesi, tüm alanları atanmadığı halde okunuyor. Bu da açıkça atanmış olmayan alanlara 'default' örtük atamalarının yapılmasına yol açıyor.
  • CS9021: Otomatik uygulanan özellik açıkça atanmadan önce denetim çağırana döndürülür ve bu da 'default' öğesinin örtük atamasına neden olur.
  • CS9022: Alan açıkça atanmadan önce denetim çağırana döndürülür ve bu da 'default' öğesinin önceden örtük atamasına neden olur.

Bu uyarıları susturmak için, okumadan önce veya oluşturucudan denetim döndürmeden önce tüm alanları ve otomatik uygulanan özellikleri açıkça atayın (CS9018, CS9019, CS9020, CS9021, CS9022). Atanmamış üyeler okunduğunda, derleyici onlara defaultyi örtük olarak atar; bu, beklenen davranış olmayabilir.

base ve this ile oluşturucu fonksiyon çağrıları

  • CS0516: Oluşturucu kendisini çağıramıyor.
  • CS0517: 'class' temel sınıfa sahip değildir ve bir temel oluşturucuyu çağıramaz.
  • CS0522: Yapıları temel sınıf oluşturucularını çağıramaz.
  • CS0768: Oluşturucu başka bir oluşturucu aracılığıyla kendisini çağıramaz.
  • CS1018: Anahtar sözcük 'this' veya 'base' bekleniyor.

Oluşturucu başlatıcıları kullanarak, biri : this() veya : base() kullanarak başka bir oluşturucuyu çağırabilir. Daha fazla bilgi için bkz. Oluşturucuları kullanma.

Bu hataları düzeltmek için aşağıdaki önerileri deneyin:

  • Döngüsel oluşturucu çağrı zincirlerini kırın; çünkü bir oluşturucu, başka bir oluşturucu (CS0516, CS0768) aracılığıyla doğrudan veya dolaylı olarak kendisini çağıramaz. Oluşturucu zincirinin sonunda aynı türde başka bir oluşturucu çağırmayan bir oluşturucuda sona erdiğinden emin olun.
  • : base() başlatıcıyı yapı türlerindeki oluşturuculardan veya System.Object içindeki oluşturuculardan kaldırın, çünkü bu türlerin çağrılacak bir temel sınıf oluşturucusu yoktur (CS0517, CS0522). Yapı türleri örtük olarak System.ValueType'dan devralır, ancak oluşturucusunu açıkça çağıramazsınız.
  • Oluşturucu başlatıcısını tamamlayın veya oluşturucu bildiriminden iki nokta üst üste (:) kaldırın, çünkü bir oluşturucu imzasını iki nokta üst üste takip ettiğinde, derleyici this() veya base() (CS1018) bekler. Uygun yapıcı çağrısını ekleyin veya zincirleme amaçlanmamışsa iki noktayı tamamen kaldırın.

Kayıtlar ve kopya oluşturucuları

  • CS8867: Temel türde erişilebilir kopya oluşturucu bulunamadı.
  • cs8868: Kayıttaki bir kopya oluşturucu, tabanın bir kopya oluşturucusunu veya kayıt nesneden devralıyorsa parametresiz bir nesne oluşturucuyu çağırmalıdır.
  • CS8878: Kayıt mühürlenmediğinden kopya oluşturucunun genel veya korumalı olması gerekir.
  • CS8910: Birincil oluşturucu, sentezlenmiş kopya oluşturucuyla çatışır.

Türetilmiş bir kayıt türünde, açık kopya oluşturucunuzun, : this() başlatıcısını kullanarak temel türün kopya oluşturucusunu çağırması gerekir. Eğer kayıt doğrudan System.Object nesnesinden devralıyorsa, bunun yerine parametresiz nesne oluşturucuyu (CS8868) çağırabilir.

Kayıtlar derleyici tarafından sentezlenmiş bir kopya oluşturucu içerir. Açık bir kopya oluşturucu yazabilirsiniz, ancak belirli gereksinimleri karşılaması gerekir. Kayıt kopyalama oluşturucuları şu gereksinimleri ihlal ettiğinde derleyici hatalar oluşturur:

  • Temel türün erişilebilir bir kopya oluşturucusunun olması gerekir. Tüm record türlerin bir kopya oluşturucu vardır. Temel türün bir recordolduğundan emin olun veya buna erişilebilir bir kopya oluşturucu (CS8867) ekleyin.
  • Türetilmiş bir kayıt türünde, açık kopya oluşturucunuzun, : base() başlatıcısını kullanarak temel türün kopya oluşturucusunu çağırması gerekir. Eğer kayıt doğrudan System.Object nesnesinden devralıyorsa, bunun yerine parametresiz nesne oluşturucuyu (CS8868) çağırabilir.
  • Kopya oluşturucuları, kayıt türü public değilse, protected veya sealed olmalıdır. Kopya oluşturucusunun (CS8878) uygun erişim değiştiricisini ekleyin.
  • Açık kopya oluşturucunuz sentezlenmiş kopya oluşturucuyla aynı imzaya sahipse, tanımlar çakışıyor. Açık kopya oluşturucunuzu kaldırın veya imzasını değiştirin (CS8910).

Modül başlatıcı bildirimleri

  • CS8813: Modül başlatıcı sıradan bir üye yöntemi olmalıdır.
  • CS8814: Modül başlatıcı yöntemi 'method' modülü düzeyinde erişilebilir olmalıdır.
  • CS8815: 'method' modül başlatıcı yönteminin statik ve sanal olmayan bir parametre içermesi ve 'void' döndürmesi gerekir.
  • CS8816: 'method' modül başlatıcı yöntemi genel olmamalıdır ve genel bir türde bulunmamalıdır.
  • CS8900: Modül başlatıcı 'UnmanagedCallersOnly' ile ilişkilendirilemez.
  • CS8901: 'method', 'UnmanagedCallersOnly' ile ilişkilendirilir ve doğrudan çağrılamaz. Bu yönteme bir işlev işaretçisi alın.
  • CS8902: 'method', 'UnmanagedCallersOnly' ile ilişkilendirilir ve temsilci türüne dönüştürülemez. Bu yönteme bir işlev işaretçisi alın.

Bu hatalar, ModuleInitializerAttribute ile işaretlenmiş yöntemlerin gereksinimlerini uygular. Modül başlatıcıları, modüldeki diğer kodlar yürütülmeden önce bir derleme ilk yüklendiğinde otomatik olarak çalışır. Kuralların tamamı için bkz . Modül başlatıcıları.

Bu hataları düzeltmek için, belirli bir tanılamaya göre aşağıdaki değişikliklerden birini uygulayın:

  • ile [ModuleInitializer] işaretlenen yöntemin özellik erişimcisi, olay erişimcisi, yerel işlev, lambda, oluşturucu, yıkıcı veya işleç (CS8813) değil sıradan bir yöntem olduğundan emin olun. Derleyici yalnızca normal bir yöntem bildirimini modül başlatıcı altyapısı için geçerli bir hedef olarak değerlendirebilir.
  • Modül başlatıcı yöntemini ve tüm içeren türlerini internal veya public yaparak bu yöntemin üst düzey türün dışından erişilebilir olmasını sağlayın (CS8814). Çalışma zamanının, modül düzeyinde erişilebilirlik gerektiren oluşturulan modül düzeyi kodundan yöntemi çağırması gerekir.
  • Modül başlatıcı yöntemini static, sanal olmayan, parametresiz ve dönüş türüyle void (CS8815) bildirin. Çalışma zamanı, modül başlatıcılarını bağımsız değişken olmadan çağırır ve sonucu atar, bu nedenle yöntem imzası bu kısıtlamalarla tam olarak eşleşmelidir.
  • Modül başlatıcı yönteminden genel tür parametrelerini kaldırın ve yöntemi herhangi bir genel içeren türden (CS8816) çıkarın. Çalışma zamanı, başlatıcı çağrılırken hangi tür bağımsız değişkenlerin sağlanacağını belirleyemez, bu nedenle genel yöntemlere ve genel türlerdeki yöntemlere izin verilmez.
  • UnmanagedCallersOnlyAttribute modül başlatıcı yönteminden (CS8900) öğesini kaldırın. Modül başlatıcıları yönetilen çalışma zamanı altyapısı tarafından çağrılır, bu nedenle yalnızca yönetilmeyen arayanlar ile sınırlandırılamazlar.
  • Doğrudan ile [UnmanagedCallersOnly] işaretlenmiş bir yöntemi çağırmak yerine bir işlev işaretçisi alın (CS8901). ile UnmanagedCallersOnlyAttribute öznitelik verilen yöntemler yönetilen koddan çağrılamıyor. İşlev işaretçisi (&) almak ve bu işaretçiyi yönetilmeyen koda geçirmek için delegate* unmanaged<...> işlecini bir unsafe bağlamında kullanın. Projeniz henüz güvenli olmayan koda izin vermiyorsa seçeneğini etkinleştirin AllowUnsafeBlocks.
  • ile [UnmanagedCallersOnly] işaretlenmiş bir yöntemi temsilci türüne (CS8902) dönüştürmek yerine işlev işaretçisi alın. ile özniteliklendirilen UnmanagedCallersOnlyAttribute yöntemler, çağırma kuralı uyumsuz olduğundan yönetilen temsilci olarak temsil edilemez. Bunun yerine bir delegate* unmanaged<...> bağlamda işlev işaretçilerini (unsafe) kullanın. Projeniz henüz güvenli olmayan koda izin vermiyorsa seçeneğini etkinleştirin AllowUnsafeBlocks.

Daha fazla bilgi için bkz. ModuleInitializerAttribute ve UnmanagedCallersOnlyAttribute.

Birincil oluşturucu bildirimi

Birincil oluşturucular , parametreleri doğrudan tür bildiriminde bildirir. Derleyici, birincil oluşturucu parametresini üyelerde veya alan başlatıcılarda kullandığınızda depolamak için bir alanı sentezler.

Oluşturucu zincirleme

  • CS8861: Beklenmeyen bağımsız değişken listesi.
  • CS8862: Parametre listesi olan bir tür içinde bildirilen bir oluşturucuda 'this' oluşturucu başlatıcısı olmalıdır.
  • CS9122: Beklenmeyen parametre listesi.

Bir tür birincil oluşturucuya sahip olduğunda, açıkça bildirilen diğer tüm oluşturucuların : this(...) kullanarak bu birincil oluşturucuya zincirleme yapması gerekir.

Bu hataları düzeltmek için aşağıdaki önerileri deneyin:

  • Birincil oluşturucuya (: this(...)) uygun bağımsız değişkenleri geçiren bir başlatıcı ekleyin; çünkü açıkça bildirilen tüm oluşturucular birincil oluşturucuya zincirleme yapmalıdır.
  • Söz dizimi class Derived : Base(args) yalnızca birincil oluşturucuya (Base) sahip olduğunda geçerli olduğundan, temel türün birincil oluşturucusunun olmadığı durumlarda temel tür başvurusundan parametre listesini kaldırın.
  • Arabirimlerin birincil oluşturucuları (interface) olmadığından, bir bildirimden birincil oluşturucu parametre listesini kaldırın.

Temel oluşturucu çağrılarında parametre kullanımı

  • CS9105: Bu bağlamda birincil oluşturucu parametresi kullanılamaz.
  • CS9106: Tanımlayıcısı, bu bağlamdaki tür ve parametre arasında belirsizdir.

Temel oluşturucu çağrısında birincil oluşturucu parametrelerini yalnızca birincil oluşturucu bildiriminin bir parçası olarak geçirirseniz kullanabilirsiniz.

Bu hataları düzeltmek için aşağıdaki önerileri deneyin:

  • Birincil oluşturucu parametreleri yalnızca tür bildiriminin (: base()) temel yan tümcesinde görüntülenebildiğinden, parametre kullanımını açıkça bildirilen bir oluşturucunun çağrısında kullanmak yerine tür bildiriminin temel yan tümcesine taşıyın.
  • Bir tür ve birincil oluşturucu parametresi aynı adı paylaştığında türü veya parametreyi yeniden adlandırın, çünkü başvuru belirsiz hale gelir (CS9106).

Başvuru benzeri tür parametreleri

  • CS9108: Anonim bir yöntem, lambda ifadesi, sorgu ifadesi veya yerel işlev içinde başvuru benzeri türe sahip parametre kullanılamaz.
  • CS9109: Örnek üyesi içinde ref, outveya in birincil oluşturucu parametresi kullanılamaz.
  • CS9110: Örnek üyesi içinde başvuru benzeri türe sahip birincil oluşturucu parametresi kullanılamaz.
  • CS9136: Bir örnek üyesi içinde belirli bir türdeki birincil oluşturucu parametresi kullanılamaz.

Bu hataları gidermek için:

  • Türündeki ref struct birincil oluşturucu parametreleri, bunları nerede kullanabileceğiniz konusunda kısıtlamalara sahiptir. Parametre erişimini lambda ifadelerinden, sorgu ifadelerinden veya yerel işlevlerden (CS9108) taşıyın. olmayan ref structtürlerde, parametrelere örnek üyelerinde değil yalnızca alan başlatıcılarda veya oluşturucu gövdesinde (ref struct, CS9136) erişin.
  • Türler için ref struct, örnek yöntemlerde veya özellik erişimcilerinde in, ref veya out değiştiricileriyle birincil oluşturucu parametrelerini kullanamazsınız. Parametre değerini oluşturucudaki bir alana kopyalayın ve bunun yerine örnek üyelerinde bu alanı kullanın (CS9109).

Yapı türü kısıtlamaları

  • CS9111: Anonim yöntemler, lambda ifadeleri, sorgu ifadeleri ve bir yapının örnek üyesi içindeki yerel işlevler birincil oluşturucu parametresine erişemez.
  • CS9112: Anonim yöntemler, lambda ifadeleri, sorgu ifadeleri ve yapı içindeki yerel işlevler, örnek üyesi içinde de kullanılan birincil oluşturucu parametresine erişemez.
  • CS9120: Referansla birincil oluşturucu parametresi döndürülemiyor.
  • CS9121: Yapı birincil oluşturucu türü parametresi yapı düzeninde bir döngüye neden olur.

Bu hataları gidermek için:

  • Yapı türlerinde lambda ifadelerinde, sorgu ifadelerinde veya örnek üyeleri içindeki yerel işlevlerde birincil oluşturucu parametrelerini yakalayamazsınız. Parametreyi bu bağlamlarda kullanmadan önce yerel bir değişkene veya alana kopyalayın (CS9111, CS9112).
  • Yapı türlerinde birincil oluşturucu parametrelerini başvuru olarak döndüremezsiniz. Değeri bir alanda depolayın ve gerekirse bu alanı referansla döndürün (CS9120).
  • Birincil oluşturucu parametresinin türünün yapı düzeninde bir döngü oluşturmadığından emin olun. Yapı, doğrudan veya dolaylı olarak kendi türünde bir alan içeremez (CS9121).

Salt okunur yapı kısıtlamaları

  • CS9114: Salt okunur bir türün birincil oluşturucu parametresine atanamaz (türün yalnızca başlatma ayarlayıcısı veya değişken başlatıcı hariç).
  • CS9115: Salt okunur bir türün birincil oluşturucu parametresi yazılabilir bir başvuru olarak döndürülemez.
  • CS9116: Yalnızca-okunur bir türün ana kurucu parametresi, ref veya out değeri olarak kullanılamaz (türün init-only ayarlayıcısında veya bir değişken başlatıcıda hariç).
  • CS9117: Salt okunur bir türün birincil oluşturucu parametresinin üyeleri değiştirilemez (türün yalnızca başlatma ayarlayıcısı veya değişken başlatıcı hariç).
  • CS9118: Salt okunur bir türün birincil oluşturucu parametresinin üyeleri yazılabilir başvuru tarafından döndürülemez.
  • CS9119: Salt okunur bir türün birincil oluşturucu parametresinin üyeleri, türün yalnızca başlatma ayarlayıcısında veya bir değişken başlatıcıda olmadıkça, ref veya out değeri olarak kullanılamaz.

Bu hataları gidermek için:

  • Türlerde readonly struct , birincil oluşturucu parametrelerini ve üyelerini yalnızca init ayarlayıcıları veya değişken başlatıcıları dışında değiştiremezsiniz. Atamaları alan başlatıcılarına veya yalnızca başlatma özelliği ayarlayıcılarına (CS9114, CS9117) taşıyın.
  • readonly struct türlerinde birincil oluşturucu parametrelerini ve onların üyelerini yazılabilir bir başvuruyla döndüremezsiniz. Alternatif olarak readonly ref ile veya değere döndür (CS9115, CS9118).
  • Ana oluşturucu parametrelerini ve bunların üyelerini, ref türlerinde out veya readonly struct bağımsız değişkenleri olarak geçiremezsiniz. Bunları değere veya argüman olarak in geçirin (CS9116, CS9119).

Yakalanan ve gölgeli parametreler için uyarılar

  • CS9107: Parametre, kapsayan türün durumuna yakalanır ve değeri de temel oluşturucuya geçirilir. Değer, temel sınıf tarafından da yakalanabilir.
  • CS9113: Parametre okunmadı.
  • CS9124: Parametre, kapsayıcı türün durumuna kaydedilir ve değeri bir alanı, özelliği veya olayı başlatmak için de kullanılır.
  • CS9179: Birincil oluşturucu parametresi tabandan bir üye tarafından gölgelenmiştir.

Aşağıdaki uyarılar, birincil oluşturucu parametrelerini depolama veya erişmeyle ilgili olası sorunları gösterir:

  • Bir parametreyi hem temel oluşturucuya geçirir hem de türetilmiş türde erişirseniz iki kez depolayabilirsiniz. Temel sınıfta bir kopyanız ve türetilmiş sınıfta başka bir kopyanız olabilir. Yinelemeyi (CS9107) önlemek için her iki kopyaya da ihtiyacınız olup olmadığını göz önünde bulundurun veya kodunuzu yeniden yapılandırın.
  • Hiç okumadıysanız birincil oluşturucu parametresine ihtiyacınız yoktur. Kullanılmayan parametreleri birincil oluşturucu bildiriminden (CS9113) kaldırın.
  • Bir parametreyi hem iç içe geçmiş türde yakalar hem de bir alanı, özelliği veya olayı başlatmak için kullanırsanız, bu parametreyi iki kez depolayabilirsiniz. Ayrı bir üye (CS9124) başlatmak yerine yakalanan parametreyi doğrudan kullanmayı düşünün.
  • Temel tür üyesi, her ikisi de aynı ada sahip olduğunda birincil yapıcı fonksiyon parametresini gölgeler. Karışıklığı önlemek için parametresini yeniden adlandırın (CS9179).