Özellik tanımlamalarıyla ilgili hatalar ve uyarılar

Özellik bildirimleriyle ilgili aşağıdaki hatalarla karşılaşabilirsiniz:

  • CS0200: Özellik veya dizin oluşturucu 'özelliği' atanamaz; salt okunur
  • CS0273: 'erişimci' erişimcisinin erişilebilirlik değiştiricisi, 'özellik' özelliğinden veya dizin oluşturucu 'özelliğinden' daha kısıtlayıcı olmalıdır
  • CS0274: Özelliğin veya 'property' dizin oluşturucusunun her iki erişimcisi için erişilebilirlik değiştiricileri belirtilemiyor
  • CS0275: 'accessor': Erişilebilirlik değiştiricileri arabirimdeki erişimcilerde kullanılamayabilir
  • CS0276: 'property': Erişimcilerdeki erişilebilirlik değiştiricileri yalnızca özellik veya dizin oluşturucunun hem get hem de set erişimcisi varsa kullanılabilir
  • CS0442: 'property': soyut özelliklerin özel erişimcileri olamaz
  • CS0544: 'property': 'member' bir özellik olmadığından geçersiz kılınamıyor
  • CS0545: 'function' : 'property' üzerinde işlem yapılabilir bir get erişimcisine sahip olmadığından geçersiz kılınamıyor
  • CS0546: 'accessor': 'property' geçersiz kılınabilir bir küme erişimciye sahip olmadığından geçersiz kılınamıyor
  • CS0547: 'property': özellik veya dizin oluşturucu geçersiz türe sahip olamaz
  • CS0548: 'property': özellik veya dizin oluşturucu en az bir erişimciye sahip olmalıdır
  • CS0571: 'function' : operatör veya erişimci açıkça çağrılamaz
  • CS0610: Alan veya özellik 'tür' türünde olamaz
  • CS0840: 'Özellik adı', soyut veya extern olarak işaretlenmediğinden bir gövde bildirmelidir. Otomatik olarak uygulanan özelliklerin hem alma hem de ayarlama erişimcilerini tanımlaması gerekir.
  • CS1014: Al veya ayarla erişimcisi bekleniyor
  • CS1043: { veya ; bekleniyor
  • CS1715: 'type': geçersiz kılınan 'member' üyesiyle eşleşmesi için türün 'type' olması gerekmektedir
  • CS8050: Yalnızca otomatik uygulanan özellikler veya 'field' anahtar sözcüğünü kullanan özellikler başlatıcılara sahip olabilir.
  • CS8051: Otomatik uygulanan özelliklerin get erişimcileri olmalıdır.
  • CS8053: Arabirimlerdeki örnek özellikleri başlatıcılara sahip olamaz.
  • CS8080: Otomatik uygulanan özellikler geçersiz kılınan özelliğin tüm erişimcilerini geçersiz kılmalıdır.
  • CS8145: Otomatik uygulanan özellikler referans ile döndürülemez
  • CS8147: Referans olarak döndürülen özellikler set erişimcilerine sahip olamaz
  • CS8341: Salt okunur yapılarda otomatik uygulanan örnek özellikleri salt okunur olmalıdır.
  • CS8657: Statik üye 'üye' 'salt okunur' olarak işaretlenemez.
  • CS8658: Otomatik uygulanan 'set' erişimcisi 'accessor' 'salt okunur' olarak işaretlenemez.
  • CS8659: Otomatik uygulanan 'property' özelliği bir 'set' erişimciye sahip olduğundan 'salt okunur' olarak işaretlenemez.
  • CS8660: 'Readonly' değiştiricileri, 'property' ya da 'dizinleyici'nin hem kendisinde hem de erişimcisinde kullanılamaz. Bunlardan birini kaldırın.
  • CS8661: Özelliğin veya 'property' dizin oluşturucusunun her iki erişimcisinde 'readonly' değiştiricileri belirtilemez. Bunun yerine özelliğin kendisine bir 'readonly' değiştirici yerleştirin.
  • CS8664: 'property': 'readonly' yalnızca özelliğin veya dizin oluşturucunun hem get hem de set erişimcisi varsa erişimcilerde kullanılabilir
  • CS8852: Yalnızca başlatma özelliği veya dizin oluşturucu 'özelliği' yalnızca bir nesne başlatıcıda veya bir örnek oluşturucusunda veya 'init' erişimcisinde 'bu' veya 'temel' üzerinde atanabilir.
  • CS8853: 'member' yalnızca geçersiz kılınan 'member' üyesiyle eşleşmelidir
  • CS8855: 'accessor' ve 'accessor' erişimcilerinin her ikisi de yalnızca başlangıç veya hiçbiri olmamalıdır
  • CS8856: 'init' erişimcisi statik üyelerde geçerli değil
  • CS8903: 'init' erişimcileri 'salt okunur' olarak işaretlenemez. Bunun yerine 'property' öğesini salt okunur olarak işaretleyin.
  • CS9029: Türler ve diğer adlar 'gerekli' olarak adlandırılamaz.
  • CS9030: Gerekli olan 'üye'yi geçersiz kıldığı için 'üye' gerekli olmalıdır
  • CS9031: Gerekli 'üye' üyesi 'üye' tarafından gizlenemez.
  • CS9032: Gerekli üye, içeren türden daha az görünür olamaz veya ayarlayıcısı içeren türden daha az görünür olamaz.
  • CS9033: 'System.Runtime.CompilerServices.RequiredMemberAttribute' kullanmayın. Bunun yerine gerekli alanlar ve özelliklerde 'required' anahtar sözcüğünü kullanın.
  • CS9034: Gerekli üye ayarlanabilir olmalıdır.
  • CS9035: Nesne başlatıcıda veya öznitelik oluşturucusunda gerekli üye ayarlanmalıdır.
  • CS9036: Gerekli 'memberName' üyesine bir değer atanması gerekiyor, iç içe bir üye veya koleksiyon başlatıcı kullanılamaz.
  • CS9037: 'type' için gerekli üyeler listesi yanlış biçimlendirilmiş ve yorumlanamaz.
  • CS9038: 'tür' temel türü için gerekli üye listesi yanlış biçimlendirilmiş ve yorumlanamaz. Bu oluşturucuyu kullanmak için 'SetsRequiredMembers' özniteliğini uygulayın.
  • CS9039: Bu özniteliği olan bir oluşturucuya zincirlediğinden bu oluşturucu 'SetsRequiredMembers' eklemelidir.
  • CS9040: Tür, gerekli üyelere sahip olduğundan genel tür veya yöntemdeki parametredeki 'new()' kısıtlamasını karşılayamıyor.
  • CS9042: İçeren tür eski değilse veya tüm oluşturucular kullanımdan kaldırılmadığı sürece gerekli üye 'ObsoleteAttribute' ile ilişkilendirilmemelidir.
  • CS9045: Bir betiğin veya gönderimin en üst düzeyinde gerekli üyelere izin verilmez.
  • CS9258: Bu dil sürümünde, 'field' anahtar sözcüğü özelliği için birleştirilmiş bir yedekleme alanına bağlanır. Sentezlenmiş bir yedekleme alanı oluşturmaktan kaçınmak ve mevcut üyeye başvurmak için bunun yerine 'this.field' veya '@field' kullanın.
  • CS9263: Kısmi bir özelliğin hem tanım hem de uygulama üzerinde başlatıcısı olamaz.

Alan destekli özellikler için aşağıdaki uyarılar oluşturulabilir:

  • CS9264: Null atanamaz özellik 'property', oluşturucudan çıkarken null olmayan bir değer içermelidir. 'required' değiştiricisini eklemeyi, özelliği null atanabilir olarak bildirmeyi veya 'field' öğesinin 'get' erişimcisinde null olduğu durumu güvenli bir şekilde işlemeyi göz önünde bulundurun.
  • CS9266: 'property' özelliğinin 'accessor' erişimcisi 'field kullanmalıdır' çünkü diğer erişimci bunu kullanıyordur.
  • CS9273: Bu dil sürümünde , 'field' bir özellik erişimcisi içinde bir anahtar sözcüktür. Değişkeni yeniden adlandırın veya bunun yerine '@field' tanımlayıcısını kullanın.

Aşağıdaki bölümlerde bu hataların ve uyarıların nedeni ve düzeltmeleri açıklanmaktadır.

Erişimci erişilebilirliği

  • CS0273: 'erişimci' erişimcisinin erişilebilirlik değiştiricisi, 'özellik' özelliğinden veya dizin oluşturucu 'özelliğinden' daha kısıtlayıcı olmalıdır
  • CS0274: Özelliğin veya 'property' dizin oluşturucusunun her iki erişimcisi için erişilebilirlik değiştiricileri belirtilemiyor
  • CS0275: 'accessor': Erişilebilirlik değiştiricileri arabirimdeki erişimcilerde kullanılamayabilir
  • CS0276: 'property': Erişimcilerdeki erişilebilirlik değiştiricileri yalnızca özellik veya dizin oluşturucunun hem get hem de set erişimcisi varsa kullanılabilir
  • CS0442: 'property': soyut özelliklerin özel erişimcileri olamaz

Bu hatalar, özellik ve dizin oluşturucu erişimcileri üzerindeki erişim değiştiricileri için kuralların uygulanmasını zorunlu kılar. Kuralların tamamı için C# belirtimindeki Erişimci Erişilebilirliğini ve Erişimcileri Kısıtlama bölümüne bakın. Bu hataları düzeltmek için, belirli bir tanılamaya göre aşağıdaki değişikliklerden birini uygulayın:

  • Özelliğin bildirilen erişilebilirliğinden (CS0273) daha kısıtlayıcı bir erişim değiştirici kullanın. Örneğin, bir internal özelliğin private bir erişimci kümesi olabilir, ancak bir public erişimci olmayabilir. Erişimcinin erişilebilirliği, özelliğin erişilebilirliğinin uygun bir alt kümesi olmalıdır.
  • Erişim değiştiricisini iki erişimciden yalnızca birine (CS0274) uygulayın. Özellik bildirimi her iki erişimci için de varsayılan erişilebilirliği oluşturur ve yalnızca bir erişimci bu varsayılandan farklı olabilir. Erişim değiştiricisini kısıtlı erişime ihtiyaç duyan erişimciye yerleştirin.
  • Arabirim özelliği bildirimlerinde (CS0275) erişim değiştiricilerini erişimcilerden kaldırın. Arabirim üyeleri genel bir sözleşme tanımlar ve ayrı erişimcilerde erişim değiştiricilerine izin verilmez. Erişimi kısıtlamanız gerekiyorsa, kısıtlamayı uygulama sınıfına uygulayın.
  • Bir erişim değiştiricisi uygulamadan önce, özelliğe hem bir get hem de bir set erişimci ekleyin (CS0276). Erişimcilerdeki erişim değiştiricileri, bir erişimcinin görünürlüğünü diğerinden ayırt eder ve her iki erişimcinin de mevcut olmasını gerektirir. Özelliğin yalnızca bir erişimcisi varsa, erişim değiştiricisini buradan kaldırın.
  • Soyut özellik erişimcilerindeki private erişim değiştiricisini daha az kısıtlayıcı bir değiştirici (CS0442) olarak değiştirin. Bu sınıfların uygulama sağlayabilmesi için soyut üyelerin türetilmiş sınıflar tarafından erişilebilir olması gerekir. Kullanın protected, internal veya protected internal yerine private.

Daha fazla bilgi için Erişimci Erişilebilirliğini Kısıtlama ve Özellikler bölümlerine bakın.

Özellik bildirimi söz dizimi

  • CS0547: 'property': özellik veya dizin oluşturucu geçersiz türe sahip olamaz
  • CS0548: 'property': özellik veya dizin oluşturucu en az bir erişimciye sahip olmalıdır
  • CS0571: 'function' : açıkça işleç veya erişimci çağrılamıyor
  • CS0610: Alan veya özellik 'tür' türünde olamaz
  • CS0840: 'Özellik adı' özelliği, soyut veya extern olarak işaretlenmediğinden bir gövde bildirmelidir. Otomatik olarak uygulanan özelliklerin hem get hem de set erişimcilerini tanımlaması gerekir.
  • CS1014: Get veya set erişimcisi bekleniyor
  • CS1043: { veya ; bekleniyor

Bu hatalar özellik ve dizin oluşturucu bildirimlerinin yapısal gereksinimlerini zorunlu kılıp uygular. Kuralların tamamı için bkz . Özellikler ve C# belirtiminin Özellikler bölümü. Bu hataları düzeltmek için, belirli bir tanılamaya göre aşağıdaki değişikliklerden birini uygulayın:

  • özellik türünü geçerli bir türe void (CS0547) değiştirin. Özellikler ve dizin oluşturucular ifadeleri temsil eder ve void geçerli bir ifade türü değildir. Özelliğin temsil ettiği veriler için uygun türü seçin.
  • Özellik bildirimine (get) en az bir erişimci (set, initveya ) ekleyin. Erişimcisi olmayan bir özelliğin değerini okuma veya yazma imkanı yoktur. Bir get erişimci, bir set veya init erişimci ya da her ikisini de ekleyin.
  • Erişimci yöntemlerini doğrudan çağırmak yerine özellik söz dizimini kullanarak özelliklere erişin (CS0571). Özellik erişimcileri, get_PropertyName ve set_PropertyName adlı yöntemlere derlenir, ancak bu yöntemler, özellik söz dizimi aracılığıyla (obj.Property ve obj.Property = value), çağrılır. Aynı ilke işleçler için de geçerlidir. gibi ++objyöntemleri çağırmak yerine işleç söz dizimlerini (op_Increment) kullanın.
  • Alan veya özellik türünü kısıtlanmış bir türden izin verilen türe (CS0610) değiştirin. ve TypedReference gibi ArgIterator belirli türler alan veya özellik olarak kullanılamaz. Bu türler yine de yöntem parametreleri veya yerel değişkenler olarak kullanılabilir.
  • Salt okunur bir özellik için yalnızca get otomatik uygulanan özellik bildirin. Aksi takdirde, hem get hem de set erişimcilerini otomatik uygulanan özellik bildirimlerine ekleyin veya açık erişimci gövdeleri sağlayın (CS0840). Özel bir mantığa ihtiyaç duyan bir özellik için, C# 13 ile eklenen field anahtar kelimesini kullanarak erişici gövdesinde, derleyici tarafından oluşturulan yedek alanına erişebilirsiniz. abstract veya extern özellikleri için erişimci gövdelerini kaldırın, çünkü uygulama başka bir yerde sağlanmaktadır. partial özellikleri için bildirim ve uygulamayı kısmi tür bildirimlerinde ayrı ayrı tanımlayın.
  • Özellik gövdesinin yalnızca geçerli erişimci anahtar sözcükleri get, set veya init (CS1014) içerdiğinden emin olun. Özellik gövdeleri keyfi ifadeler veya üye bildirimleri içeremez. Alanları ve yöntemleri özelliğin dışına sınıf veya yapı gövdesine taşıyın.
  • Ayraçlar veya ifade gövdeleri (CS1043) ile uygun özellik erişimcisi söz dizimlerini kullanın. Erişimci gövdeleri küme ayraçları { } kullanmalı, ifade gövdeli erişimciler => söz dizimini kullanmalı ve otomatik uygulanan özellikler, erişimci belirtecinin ardından bir noktalı virgül ile bitmelidir.

Daha fazla bilgi için bkz . Özellikler, Otomatik Uygulanan Özellikler ve Özellikleri Kullanma.

Özellik geçersiz kılmaları

  • CS0544: 'property': 'member' bir özellik olmadığından geçersiz kılınamıyor
  • CS0545: 'function', 'property'nin geçersiz kılınabilir bir get erişimcisine sahip olmaması nedeniyle geçersiz kılınamıyor
  • CS0546: 'accessor': 'property', geçersiz kılınabilir bir set erişimcisine sahip olmadığından geçersiz kılınamıyor.
  • CS1715: 'type': geçersiz kılınan 'member' üyesiyle eşleşmek için türü 'type' olmalıdır
  • CS8080: Otomatik uygulanan özellikler geçersiz kılınan özelliğin tüm erişimcilerini geçersiz kılmalıdır.

Bu hatalar türetilmiş sınıflardaki özellikleri geçersiz kılma kurallarını zorunlu kılar. Kuralların tamamı için C# belirtiminin Devralmave Sanal, korumalı, geçersiz kılma ve soyut erişimciler bölümüne bakın. Bu hataları düzeltmek için, belirli bir tanılamaya göre aşağıdaki değişikliklerden birini uygulayın:

  • Geçersiz kıldığınız üyenin alan veya yöntem (CS0544) değil bir özellik olduğundan emin olun. Bir override özellikteki anahtar sözcük yalnızca bir temel sınıftaki bir , virtualveya abstract özelliğini hedefleyebiliroverride. Özellik olmayan bir üyeyi özellik ile gölgeleme yapmak için override yerine new anahtar sözcüğünü kullanın.
  • Yalnızca temel sınıf özellik bildiriminde (CS0545, CS0546) var olan erişimcileri geçersiz kılın. Geçersiz kılmak için sanal bir yöntem olmadığından, temel sınıfta mevcut olmayan veya erişilebilir olmayan bir özellik erişimcisini geçersiz kılamazsınız. Temel sınıf özelliğinde yalnızca bir get erişimci varsa, geçersiz kılma ile set erişimci ekleyemezsiniz. Eksik erişimciyi temel sınıfa ekleyin ve virtual ile işaretleyin veya new kullanarak temel sınıf özelliğini yeni bir özellik tanımıyla gizleyin.
  • Geçersiz kılma özelliğinin türünü geçersiz kılınan üyenin türüyle (CS1715) eşleştirin. Salt okunur (get-only) özellikler, C# 9 ile birlikte kovaryant dönüş türlerini desteklemeye başlar, bu nedenle geçersiz kılma daha türetilmiş bir tür döndürebilir. Ancak, set veya init erişimcisine sahip özellikler için, ayarlayıcının bildirilen tür üzerindeki değerleri kabul etmesi sebebiyle tam tür eşleşmesi gereklidir. Ayarlayıcı içeren bir özellikte farklı bir türe ihtiyacınız varsa, türetilmiş sınıftaki özellik türünü temel sınıf bildirimiyle eşleşecek şekilde değiştirin veya ayarlayıcıyı kaldırıp bunun yerine bir kovaryant dönüş türü kullanın.
  • Otomatik olarak uygulanmış bir özellik (CS8080) ile geçersiz kılarken, temel özellikteki tüm erişimcileri dahil edin. Otomatik uygulanan özellikler hem depolama hem de erişimci uygulamaları oluşturur, bu nedenle temel sınıfta mevcut olan tüm erişimcileri geçersiz kılmaları gerekir. Temel özelliğin hem get hem de set varsa, otomatik olarak uygulanan geçersiz kılma da her ikisine de sahip olmalıdır. Yalnızca belirli erişimcileri geçersiz kılmak için özelliğini otomatik uygulama yerine açık erişimci gövdeleri ve açık bir yedekleme alanıyla uygulayın.

Daha fazla bilgi için bkz . Devralma, Özellikler ve Özellikleri Kullanma.

Alan destekli özellikler

  • CS9258: Bu dil sürümünde, 'field' anahtar sözcüğü özelliği için birleştirilmiş bir yedekleme alanına bağlanır. Sentezlenmiş bir yedekleme alanı oluşturmaktan kaçınmak ve mevcut üyeye başvurmak için bunun yerine 'this.field' veya '@field' kullanın.
  • CS9263: Kısmi bir özelliğin hem tanım hem de uygulama üzerinde başlatıcısı olamaz.
  • CS9264: 'property' null atanamaz özelliği, oluşturucudan çıkarken null olmayan bir değer içermelidir. 'gerekli' değiştiricisini eklemeyi veya özelliği null atanabilir olarak bildirmeyi veya '' öğesinin 'fieldget' erişimcisinde null olduğu durumu güvenli bir şekilde işlemeyi göz önünde bulundurun.
  • CS9266: 'property' özelliğinin 'accessor' erişimcisi 'field kullanmalıdır' çünkü diğer erişimci bunu kullanıyordur.
  • CS9273: Bu dil sürümünde , 'field' bir özellik erişimcisi içinde bir anahtar sözcüktür. Değişkeni yeniden adlandırın veya bunun yerine '@field' tanımlayıcısını kullanın.

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

  • Adlı field herhangi bir değişkeni farklı bir tanımlayıcıyla yeniden adlandırın @field veya değişkeninize (CS9258, CS9273) başvurmak için kaçış söz dizimini kullanın. Bu düzeltme, field'nin C# 13 ve sonraki sürümlerde, derleyici tarafından sentezlenen yedekleme alanına başvurduğu özellik erişimcileri içinde bağlamsal bir anahtar sözcük olması nedeniyle gereklidir. Mevcut field adlı bir üyeye, sentezlenmiş yedek alan yerine erişmek istiyorsanız, başvuruyu netleştirmek için onu this.field ile niteleyin.
  • Yalnızca bir tane (CS9263) tutarak başlatıcıyı kısmi özellik tanımından veya uygulamadan kaldırın. Her iki konumda başlatıcılara izin verilmesi hangi değerin kullanılması gerektiği konusunda belirsizlik yaratacağından ve yedekleme alanının potansiyel olarak farklı değerlerle iki kez başlatılmasına neden olabileceğinden bu düzeltme gereklidir.
  • [field: MaybeNull, AllowNull] Yedekleme alanının null atanabilir (CS9264) olarak kabul edilmesi gerektiğini belirtmek için öznitelikleri özellik bildirimine ekleyin. Bu düzeltme, özellik türü ve derleyici tarafından sentezlenen yedekleme alanı arasındaki null atanabilirlik beklentilerini hizalar ve özelliğin null atanamaz olarak bildirildiği ancak field anahtar sözcük kullanımının null olabileceğini önerdiği uyumsuzluğu çözer. Alternatif olarak, özellik türünü null yapılabilir olarak değiştirin, başlatmayı sağlamak için required değiştiricisini ekleyin veya oluşturucuda özelliği başlatın.
  • Her iki erişimcide de field sürekli olarak anahtar sözcüğünü kullanın veya her iki erişimcide de (CS9266) açık bir yedekleme alanı kullanın. Bu düzeltme, bir erişimcinin derleyici tarafından sentezlenen yedekleme alanını değiştirdiği, diğer erişimcinin ise farklı bir depolama konumunu değiştirdiği ve tutarsız özellik davranışına yol açan olası hataları önler.

Daha fazla bilgi için bkz. alan anahtar sözcüğü ve Kısmi özellikler.

Yalnızca okunabilir özellikler

  • CS0200: Özellik veya dizin oluşturucu 'özelliği' atanamaz; salt okunur
  • CS8341: Salt okunur yapılarda otomatik olarak uygulanmış örnek özellikleri salt okunur olmalıdır.
  • CS8657: Statik üye 'üye' 'readonly' olarak işaretlenemez.
  • CS8658: Otomatik uygulanan 'set' erişimcisi 'accessor' 'salt okunur' olarak işaretlenemez.
  • CS8659: Otomatik uygulanmış 'property' özelliği, 'set' erişimcisine sahip olduğu için 'salt okunur' olarak işaretlenemez.
  • CS8660: "Özellik veya dizin oluşturucu ile onun erişimcisinde 'salt okunur' değiştiriciler belirtilemez. Bunlardan birini kaldırın.
  • CS8661: Özelliğin veya 'property' dizin oluşturucusunun her iki erişimcisinde 'readonly' değiştiricileri belirtilemez. Bunun yerine özelliğin kendisine bir 'readonly' değiştirici yerleştirin.
  • CS8664: 'property': 'readonly' yalnızca özelliğin veya dizin oluşturucunun hem get hem de set erişimcisi varsa erişimcilerde kullanılabilir

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

  • Yazılabilir hale getirmek için özelliğe bir set veya init erişimcisi ekleyin (CS0200). Bu düzeltme gereklidir çünkü ayar erişimcileri olmayan özellikler salt okunurdur ve yalnızca tanımlayıcı türün yapıcısında veya alan ilkleyicisinde atanabilir. Nesne başlatma sırasında özelliğin ayarlanması gerekiyor fakat sonrasında değişmez kalacaksa, init erişimci yerine bir set erişimci kullanın. Özelliğin salt okunur kalması gerekiyorsa, atamayı başlatmaya izin verilen oluşturucuya taşıyın veya atamanın gerekli olup olmadığını yeniden düşünün.
  • Otomatik olarak uygulanan örnek özelliklerini bir içinde tanımladığınızda olarak işaretleyin (CS8341). Bu düzeltme, tüm örnek üyelerinin garantiye uygun olmasını sağlayarak, içeren yapının değişmezlik sözleşmesini readonly zorunlu kılır. Özelliğin değiştirilebilir olması gerekiyorsa, değiştiriciyi readonly yapı bildiriminden kaldırın veya özelliği açık bir yedekleme alanı ve örnek durumunu değiştirmeyen erişimci gövdeleriyle uygulayın.
  • Değiştiriciyi readonly statik özellikten veya erişimci bildirimlerinden (CS8657) kaldırın. readonly değiştiricisi yalnızca, örnek durumunu değiştirmediklerini belirtmek için yapıların örnek üyelerine uygulanır ve statik üyelerin korunacak bir örnek durumu yoktur. Bu düzeltme bu nedenle gereklidir. Salt okunur bir statik özelliğe ihtiyacınız varsa, set erişimcisini çıkarmalı readonly değiştiricisini kullanmamalısınız.
  • Otomatik uygulanmış readonly erişimcilerden set değiştiriciyi kaldırın veya yalnızca get erişimciye uygulayın (CS8658). Erişimciler doğası gereği durumu değiştirdikleri için bu düzeltme gereklidir ve bu durum, örnek durumunda değişiklik yapılmamasını garanti eden değiştirme amacına set aykırıdır readonly. Başlatma sırasında ayarlanabilen ancak daha sonra salt okunur olan bir özelliğe ihtiyacınız varsa, init erişimci yerine set erişimci kullanın.
  • Özelliğin bir readonly erişimcisi (set) olduğunda, değiştiriciyi özellik bildiriminden kaldırın. Erişimcileri olan set özellikler, örnek durumunu değiştirebildiği için readonly garantisini ihlal edebilir; bu nedenle bu düzeltme gereklidir. Başlatma zamanı ayarına yalnızca ihtiyaç duyuyorsanız, set erişimcisini init erişimcisiyle değiştirin veya özelliği gerçekten salt okunur yapmak için set erişimcisini tamamen kaldırın.
  • Değiştiriciyi readonly özellik bildirimine veya tek tek erişimcilere yerleştirin, ancak her ikisini birden (CS8660, CS8661) kullanmayın. Bu düzeltme, hangi değiştiricinin öncelikli olduğu konusunda karışıklık oluşturabilecek yedekli değiştirici bildirimlerini önler. Belirli erişimcileri olarak readonlyişaretlemek istiyorsanız, değiştiriciyi özellik bildiriminden kaldırın ve yalnızca erişimcilerin üzerine yerleştirin. Alternatif olarak, tüm erişimcilerin readonly olması gerekiyorsa, bireysel erişimciler yerine özelliğin kendisini işaretleyin.
  • Ayrı ayrı erişimcileri get olarak işaretlerken (set), hem readonly hem de erişimcilerin mevcut olduğundan emin olun. Bu düzeltme gereklidir çünkü readonly ayrı erişimcilerdeki değiştirici, durumu değiştiren erişimciler ile değişmeyenler arasında ayrım yapar ve bu da yalnızca her iki erişimci türü mevcut olduğunda anlamlıdır. Özelliğin yalnızca bir get erişimcisi varsa, ayrı bir erişimci yerine, özelliğin tamamını readonly olarak işaretleyin.

Daha fazla bilgi için bkz. salt okunur örnek nesne üyeleri, init anahtar sözcüğü ve Özellikler.

Yalnızca başlatma özellikleri

  • CS8852: Yalnızca başlatma özelliği veya dizin oluşturucu 'özellik' yalnızca bir nesne başlatıcıda, bir örnek oluşturucusunda 'this' veya 'base' üzerinde ya da bir 'init' (başlatma) erişimcisinde atanabilir.
  • CS8853: 'member' yalnızca geçersiz kılınan 'member' üyesiyle eşleşmelidir
  • CS8855: 'accessor' ve 'accessor' adlı erişimcilerin her ikisi de yalnızca başlatıcı olmalı veya hiç biri olmamalıdır
  • CS8856: 'init' erişimcisi statik üyelerde geçerli değil
  • CS8903: 'init' erişimcileri 'salt okunur' olarak işaretlenemez. Bunun yerine 'property' öğesini salt okunur olarak işaretleyin.

Bu hatalar, değişmez nesne başlatmayı etkinleştiren init erişimci kurallarını zorunlu kılar. Kuralların tamamı için bkz. init anahtar sözcüğü. Bu hataları düzeltmek için, belirli bir tanılamaya göre aşağıdaki değişikliklerden birini uygulayın:

  • Atamaları yalnızca `init` özellikleri için nesne başlatıcıya, kurucuya veya init erişimciye (CS8852) taşıyın. Yalnızca başlatma sırasında ayarlanabilen özellikler, nesne oluşturma tamamlandıktan sonra atanamaz. Değeri oluşturucu gövdesinde, bir erişimcide init veya bir nesne başlatıcı ifadesinde (new MyType { Property = value }) atayın. Oluşturma işleminden sonra özelliği atamak gerekiyorsa, init erişimcisini set erişimci olarak değiştirin.
  • init veya set erişimci türünü bir özelliği geçersiz kılarken eşleştirin (CS8853). Temel sınıf özelliği bir init erişimci kullanıyorsa, geçersiz kılınan özellik de init kullanmalıdır. Benzer şekilde, taban set kullanıyorsa, geçersiz kılma set kullanmalıdır. Bu tutarlılık, temel tür tarafından oluşturulan değişmezlik sözleşmesinin türetilmiş türlerde korunmasını sağlar.
  • Açık arabirim uygulamasında (init) her iki erişimcide de aynı erişimci türünü (set veya ) kullanın. Bir tür, aynı özelliği bildiren iki arabirimi açıkça uyguladığında, her iki erişimci uygulaması da uyumlu olmalıdır: ya her ikisi de init kullanmalı ya da her ikisi de set kullanmalıdır.
  • Erişimciyi init statik özellik bildirimlerinden kaldırın veya bir set erişimci (CS8856) olarak değiştirin. Erişimci init , nesne yapısına bağlı örnek başlatma desenleri için tasarlanmıştır ve statik üyeler nesne başlatmaya katılmaz. Değiştirilebilir statik özellikler için bir set erişimci kullanın veya salt okunur statik özellikler için ayarlayıcıyı tamamen kaldırın.
  • readonly değiştiricisini init erişimciden (CS8903) çıkarın. Bir readonly yapı üyesinde bulunan değiştirici, üyenin yapı örneğini değiştirmemesini garanti eder. Erişimci init örnek durumuna atama yaptığından, yapı doğal olarak değişir ve readonly olarak işaretlenemez. Erişimciyi get yapmak için, yalnızca get erişimcisine readonly değiştiricisini uygulayın.

Daha fazla bilgi için bkz. init anahtar sözcüğü ve Nesne ve Koleksiyon Başlatıcıları.

Özellik başlatıcıları

  • CS8050: Yalnızca otomatik uygulanan özellikler veya 'field' anahtar sözcüğünü kullanan özellikler başlatıcılara sahip olabilir.
  • CS8051: Otomatik uygulanan özelliklerin get erişilebilir olmaları gerekir.
  • CS8053: Arabirimlerdeki örnek özellikleri başlatıcılara sahip olamaz.

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

  • Erişimci gövdelerini kaldırarak ve derleyicinin yedekleme alanını (CS8050) oluşturmasına izin vererek özelliği otomatik uygulanan söz dizimini kullanacak şekilde dönüştürün. Bu düzeltme gereklidir çünkü yalnızca derleyici tarafından yönetilen depolamaya sahip özellikler başlatıcılara sahip olabilir ve başlatmanın herhangi bir erişimci mantığı yürütülmeden önce gerçekleşmesini sağlar. Alternatif olarak, derleyici tarafından sentezlenen arka alana erişmek için erişimci uygulamalarını, field anahtar sözcüğünü kullanarak değiştirin. Bu yaklaşım, özel erişimci mantığını korurken başlatıcıyı etkinleştirir. Her iki yaklaşım da uygun değilse başlatıcıyı kaldırın ve değeri bir oluşturucuda atayın; burada başlatma dizisi üzerinde tam denetime sahip olursunuz.
  • Başlatılan değerin okunmasını etkinleştirmek için otomatik uygulanan özelliğe bir get erişimci ekleyin (CS8051). Başlatıcıların, alınabilir olması gereken bir değer ayarlaması gerektiğinden ve yalnızca yazılabilir bir özellik, özellik başlatmanın bu temel beklentisini ihlal ettiği için bu düzeltme gereklidir. Yalnızca yazma özelliğine gerçekten ihtiyacınız varsa, erişimcileri açıkça bir yedekleme alanıyla uygulayın ve alanı özellik başlatıcısı kullanmak yerine doğrudan bir oluşturucuda atayın.
  • Başlatıcıyı arabirim özelliği bildirimlerinden (CS8053) kaldırın. Arabirimler ilk değerlerle somut uygulamalar sağlamak yerine türleri uygulamak için sözleşmeler tanımladığından bu düzeltme gereklidir. Varsayılan değerler sağlamanız gerekiyorsa, özelliğini arabirimi uygulayan bir sınıfta uygulayın veya varsayılan bir uygulama sağlamak için varsayılan arabirim yöntemlerini (C# 8.0 ve sonraki sürümlerde kullanılabilir) kullanın.

Daha fazla bilgi için bkz . Özellikler, Otomatik Uygulanan Özellikler ve alan anahtar sözcüğü.

Gerekli üyeler

  • CS9029: Türler ve takma adlar 'gerekli' olarak adlandırılamaz.
  • CS9030: 'üye', gerekli üye 'üye'yi geçersiz kıldığı için gerekli olmalıdır
  • CS9031: 'Gerekli üye', başka bir 'üye' tarafından gizlenemez.
  • CS9032: Gerekli üye daha az görünür olamaz veya bir ayarlayıcıyı içeren türden daha az görünür olamaz.
  • CS9033: 'System.Runtime.CompilerServices.RequiredMemberAttribute' kullanmayın. Bunun yerine gerekli alanlar ve özelliklerde 'required' anahtar sözcüğünü kullanın.
  • CS9034: Gerekli üye ayarlanabilir durumda olmalıdır.
  • CS9035: Nesne başlatıcıda veya öznitelik oluşturucusunda gerekli üye ayarlanmalıdır.
  • CS9036: Gerekli 'memberName' üyesine bir değer atanmalıdır; bu değer geçişli bir üye veya koleksiyon başlatıcı kullanılarak atanamaz.
  • CS9037: 'type' için gerekli üyeler listesi yanlış biçimlendirilmiş ve yorumlanamaz.
  • CS9038: 'tür' temel türü için gerekli üye listesi yanlış biçimlendirilmiş ve yorumlanamaz. Bu oluşturucuyu kullanmak için 'SetsRequiredMembers' özniteliğini uygulayın.
  • CS9039: Bu özniteliği olan bir oluşturucuya zincirlediğinden bu oluşturucu 'SetsRequiredMembers' eklemelidir.
  • CS9040: Tür, gerekli üyelere sahip olduğundan genel tür veya yöntemdeki parametredeki 'new()' kısıtlamasını karşılayamıyor.
  • CS9042: Gerekli üyeye 'ObsoleteAttribute' atanmış olmamalıdır, aksi takdirde içerdiği tür veya tüm oluşturucular kullanımdan kaldırılmış olmalıdır.
  • CS9045: Bir betiğin veya gönderimin en üst düzeyinde gerekli üyelere izin verilmez.

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

  • required öğesini tür veya diğer ad olarak (CS9029) kullanmaktan kaçının. Bu düzeltme gereklidir çünkü required C# 11 ve sonraki sürümlerde bağlamsal bir anahtar sözcüktür ve bunu tür adı olarak kullanmak anahtar sözcüğün görünebileceği kodda belirsizlik oluşturur.
  • Türetilmiş üyelerin gerekli üyeleri (required) geçersiz kılma sırasında değiştiriciyi koruduğundan emin olun. Bu düzeltme, temel sınıf tarafından oluşturulan sözleşmeyi zorlar ve türetilen tüm türlerin aynı başlatma gereksinimlerini karşıladığından emin olur. Türetilmiş sınıflarda (CS9031) gerekli olmayan üyelerle gerekli üyeleri gizlemekten kaçının; çünkü bu eylem, tüketicilerin temel türden beklediği başlatma sözleşmesini bozar.
  • Gerekli üyeleri en az kendi içeren türleri kadar görünür hale getirin ve özellik ayarlayıcılarının da yeterince görünür olduğundan emin olun (CS9032). Bu düzeltme, bir türün genel olarak erişilebilir olduğu ancak gerekli üyelerinin türün oluşturulduğu tüm bağlamlardan başlatılamadığı durumları önler.
  • El ile uygulamak required yerine anahtar sözcüğünü RequiredMemberAttribute kullanın (CS9033). Bu düzeltme, derleyicinin doğru meta verileri oluşturmasını ve gerekli tüm üye kurallarını zorunlu kılmasını sağlar, çünkü manuel öznitelik uygulaması bunu doğru şekilde gerçekleştiremeyebilir.
  • Gerekli üyelerin erişimcileri ayarladığından veya başka bir şekilde ayarlanabilir olduğundan emin olun (CS9034). Yazma erişimi gerektiren nesne oluşturma sırasında gerekli üyelerin başlatılması gerektiğinden bu düzeltme gereklidir. Örnekler oluştururken, gerekli üyeleri doğrudan nesne başlatıcılarda (CS9035, CS9036) başlatın. Gerekli üyenin özelliklerine erişmeden önce ayarlanması gerektiğinden, iç içe üye başlatıcılarını veya koleksiyon başlatıcılarını kullanmak yerine her gerekli üyeye bir değer atamanız gerekir.
  • SetsRequiredMembers özniteliğini, gövdelerindeki tüm gerekli üyeleri başlatan oluşturuculara uygulayın (CS9038, CS9039). Bu düzeltme, derleyiciyi oluşturucunun gerekli üye sözleşmesini yerine getirerek nesne başlatıcıları olmadan nesne oluşturmasına olanak tanıydığını bildirir. Bir oluşturucu SetsRequiredMembers başka bir oluşturucuya bağlanıyorsa, özniteliğe de sahip olmalıdır.
  • Parametresiz oluşturucu, nesne başlatıcı olmadan gerekli üye başlatmayı new() garanti etmediğinden, kısıtlamayı (CS9040) karşılaması gereken türlerde gerekli üyeleri kullanmaktan kaçının. Gerekli üyeleri, içeren tür veya tüm oluşturucular eski olmadıkça (CS9042) eski olarak işaretlemeyin; bu şekilde, üyelerin gerekli olduğu ancak kullanımlarının tavsiye edilmediği durumlar önlenir. Bu bağlamlar gerekli üyeleri ayarlamak için gereken nesne başlatma söz dizimini desteklemediğinden, üst düzey deyimlerde veya betik bağlamlarında (CS9045) gerekli üyelere izin verilmez.

Daha fazla bilgi için gerekli değiştirici başvuru makalesine ve Nesne ve Koleksiyon Başlatıcıları kılavuzuna bakın.

Referans döndüren özellikler

  • CS8145: Otomatik uygulanan özellikler başvuru olarak döndürülemez
  • CS8147: Başvuruya göre döndürülen özelliklerde erişimci ayarlanamaz

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

  • Özelliği bir yedekleme alanıyla açık bir şekilde uygulayın ve erişimcinin dönüş ifadesinde refget anahtar kelimeyi kullanın (CS8145). Otomatik uygulanan özellikler derleyicinin dahili olarak yönettiği bir özel yedekleme alanı oluşturduğundan bu düzeltme gereklidir. Özel bir alana başvuru döndürülmesi, çağıranların doğrudan erişmemesi gereken iç depolama alanını kullanıma sunar. Referans döndüren bir özellik oluşturmak için, açık bir alan bildirin ve => ref backingField sözdizimini kullanarak bu alanı geri döndürün. Alternatif olarak, depolamanın doğrudan değiştirilmesine izin verecek bir referans döndürmeniz gerekmiyorsa, ref değiştiricisini özellik bildiriminden kaldırın.
  • Başvuru döndüren özelliklerdeki set erişim yöntemini (CS8147) kaldırın. Başvuru döndüren bir özellik, döndürülen başvurunun kendisi aracılığıyla hem okuma hem de yazma erişimi sağladığından bu düzeltme gereklidir. Çağıranlar, ayrı bir ayarlayıcı yöntemine gerek kalmadan referans aracılığıyla değeri doğrudan değiştirebilir. set bir erişimci eklemek, aynı depolamayı değiştirmek için gereksiz olan ve hangi değişiklik yolunun kullanılması gerektiği konusunda karışıklık yaratabilecek iki farklı mekanizma oluşturur.

Daha fazla bilgi için bkz. referans dönüşleri ve referans yerel öğeleri ve Özellikler.