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.
C# derleyicisi , kayıt türlerini kötüye kullandığınızda hatalar ve uyarılar oluşturur. Kayıt türleri, değer tabanlı eşitlik uygulayan yerleşik üyeler sağlar. Bu tanılamalar, kayıt türlerini bildirme ve kullanma kurallarını izlemenize yardımcı olur.
- CS8851: 'type', 'Equals'u tanımlıyor ama 'GetHashCode'u tanımlamıyor.
-
CS8857: bir
withifadenin alıcısı geçersiz olmayan bir türe sahip olmalıdır. - CS8858: 'type' alıcı türü geçerli bir kayıt türü değil ve yapı türü değil.
- CS8859: 'Clone' adlı üyelere kayıtlarda izin verilmiyor.
- CS8860: Türler ve diğer adlar 'record' olarak adlandırılmamalıdır.
- CS8864: Kayıtlar yalnızca nesneden veya başka bir kayıttan devralabilir.
- CS8865: Kayıtlardan yalnızca kayıtlar devralabilir.
- CS8866: 'member' kayıt üyesinin, 'parameter' konumsal parametresiyle eşleşebilmesi için 'type' türünde okunabilir bir örnek özelliği veya alanı olması gerekir.
- CS8869: 'member', 'object' öğesinden beklenen yöntemi geçersiz kılmaz.
- CS8870: 'üye' mühürlenemez çünkü içinde bulunduğu kayıt mühürlü değil.
- CS8871: 'member', 'type' öğesinden beklenen yöntemi geçersiz kılmaz.
- CS8872: İçeren kayıt korumalı olmadığından 'üye' geçersiz kılmaya izin vermelidir.
- CS8873: Kayıt üyesi 'üye' genel olmalıdır.
- CS8874: Kayıt üyesi 'member' 'type' döndürmelidir.
- CS8875: Kayıt üyesi 'üye' korunmalıdır.
- CS8876: 'member', 'type' öğesinden beklenen özelliği geçersiz kılmaz.
- CS8877: Kayıt üyesi 'member' statik olamaz.
- CS8879: Kayıt üyesi 'üye' özel olmalıdır.
- CS8906: Kayıt eşitlik sözleşmesi özelliği 'member' get erişimcisine sahip olmalıdır.
- CS8908: 'type' türü bir kaydın alanı için kullanılamayabilir.
- CS8913: Bu parametreye karşılık gelen 'member' konumsal üyesi gizlenir.
Ayrıca, bu makale aşağıdaki uyarıyı kapsar:
- CS8907: 'name' parametresi okunmadı. Özelliği bu adla başlatmak için kullanmayı unuttun mu?
Birleştirilmiş üye imzaları
- CS8869: 'member', 'object' öğesinden beklenen yöntemi geçersiz kılmaz.
- CS8870: 'Member' içerdiği kayıt mühürlü olmadığından mühürlü olamaz.
- CS8871: 'member', 'type' öğesinden beklenen yöntemi geçersiz kılmaz.
- CS8872: İçeren kayıt korumalı olmadığından 'üye' geçersiz kılmaya izin vermelidir.
- CS8873: Kayıt elemanı 'üye' herkese açık olmalıdır.
- CS8874: Kayıt üyesi 'member', 'type' döndürmelidir.
- CS8875: Kayıt üyesi 'üye' korunmalıdır.
- CS8876: 'member', 'type' öğesinden beklenen özelliği geçersiz kılmaz.
- CS8877: Kayıt üyesi 'member' statik olmayabilir.
- CS8879: Kayıt üyesi 'üye' özel olmalıdır.
- CS8906: Kayıt eşitliği sözleşmesi özelliği 'member' bir get erişimciye sahip olmalıdır.
Derleyicinin bir kayıt türü için başka bir şekilde sentezleyecei bir üyeyi açıkça bildirdiğinizde, bildiriminizin beklenen imza, erişilebilirlik ve değiştiriciler ile eşleşmesi gerekir. Kuralların tamamı için C# dil belirtimindeki kayıt belirtimine bakın.
Bu hataları düzeltmek için, açıkça bildirilen kayıt üyelerinize aşağıdaki değişiklikleri uygulayın:
-
Equalsmetodunun,GetHashCode,ToStringdeconstruct metodu,EqualityContractözelliği veyaop_Equalityileop_Inequalityişleçlerinin erişilebilirliğinipublicolarak değiştirin. Derleyici, değer tabanlı eşitliğin tüm çağrı bağlamlarında (CS8873) düzgün çalışması için bu üyelerin genel olarak erişilebilir olmasını gerektirir. - Mühürsüz bir kayıt sınıfında bildirdiğinizde,
PrintMembersyönteminin erişilebilirliğiniprotectedolarak değiştirin. Yöntemin nedeni, türetilmiş kayıtlarınprotected(CS8875) kendi özelliklerini eklemek için bunu geçersiz kılmasıdır. - Korumalı bir kayıt sınıfında veya kayıt yapısında bildirdiğinizde yönteminin
PrintMemberserişilebilirliğiniprivateolarak değiştirin. Türetilmiş tür olmadığından, yöntemin türün (CS8879) dışında erişilebilir olması gerekmez. - Herhangi bir açıkça belirtilmiş sentezlenmiş üyenin
staticdeğiştiricisini kaldırın. Sentezlenmiş üyeler eşitlik karşılaştırması, biçimlendirme ve kopyalama gibi davranışları uygulamak için belirli kayıt örnekleri üzerinde çalışır, bu nedenle örnek üyeleri olmalıdır (CS8877). - Üyenin dönüş türünü derleyicinin beklediği türle eşleşecek şekilde değiştirin. Örneğin,
EqualityContractözelliği döndürmelidirSystem.TypeveEqualsyöntemi döndürmelidirbool. Derleyici, eşitlik ve diğer sentezlenmiş davranışlar (CS8874) için doğru kod oluşturmak için bu tam dönüş türlerine dayanır. - Mühürsüz kayıttaki açıkça bildirilen sentezlenmiş üyeden
sealeddeğiştiriciyi kaldırın. Türetilmiş kayıtların, kendi değer tabanlı eşitlik ve biçimlendirme mantığını (CS8870) sağlamak için bu üyeleri geçersiz kılabilmesi gerekir. - Eksplisit olarak sağlanan sentezlenmiş üyeleri mühürsüz kayıtlar olarak
virtualveyaoverrideolarak tanımlayın. Derleyici, devralma hiyerarşisindeki türetilmiş kayıtların davranışlarını özelleştirebilmesi için bu üyelerin geçersiz kılmaya izin vermelerini gerektirir (CS8872). - Üyenizin açıkça tanımlanan
objectveya temel kayıt türünün beklenen yöntemini geçersiz kıldığından emin olun. Örneğin,Equalsveobject.Equalsyöntemleri geçersiz kılınmalı,GetHashCodeiseobject.GetHashCodetarafından geçersiz kılınmalıdır. Derleyici, değer tabanlı eşitlik ve diğer sentezlenmiş davranışların tür hiyerarşisinde (CS8869, CS8871) doğru şekilde çalışması için bu üyelerin doğru geçersiz kılma zincirine katılıp katılmadığını denetler. - Açıkça bildirilen
EqualityContractözelliğinizin temel kaydınEqualityContractözelliğini geçersiz kıldığından emin olun. Derleyici, devralma hiyerarşisinde (CS8876) çalışma zamanında kayıt türlerini ayırt etmek için eşitlik sözleşmesinin geçersiz kılma zincirine güvenir. -
EqualityContractözelliğine birgeterişimci ekleyin. Derleyici, iki kayıt örneğinin aynı türde olup olmadığını belirlemek için çalışma zamanında eşitlik sözleşmesini okur, bu nedenle özelliğin okunabilir olması gerekir (CS8906).
Pozisyonel üyeler
- CS8866: 'member' kayıt üyesinin 'parameter' konumsal parametresiyle eşleşmesi için okunabilir bir örnek özelliği veya 'type' türünde bir alan olması gerekir.
- CS8907: 'name' parametresi okunmadı. Özelliği bu adla başlatmak için kullanmayı unuttun mu?
- CS8908: 'type' türü bir kaydın alanı için kullanılamayabilir.
- CS8913: Bu parametreye karşılık gelen 'member' konumsal üyesi gizlenir.
Bir konumsal kayıt bildirdiğinizde, derleyici her konumsal parametreye karşılık gelen özellikleri sentezler. Bu tanılamalar, açık bildirimlerinizin bu sentezlenen özelliklerle çakıştığını gösterir. Kuralların tamamı için C# dil belirtimindeki kayıt belirtimine bakın.
Bu hataları düzeltmek için konumsal kayıt bildirimlerinize aşağıdaki değişiklikleri uygulayın:
- Bir konumsal parametreye karşılık gelen açıkça bildirilen herhangi bir üyeyi, parametresiyle aynı türe sahip okunabilir bir örnek özelliği veya alanı olacak şekilde değiştirin. Derleyicinin, sentezlenen
Deconstructyöntem ve konumsal desen eşleştirmesinin değere doğru şekilde erişebilmesi için üyenin okunabilir ve tür uyumlu olması gerekir (CS8866). - Açık bir oluşturucu sağladığınızda, her konumsal parametrenin oluşturucu gövdesinde karşılık gelen özelliğini başlatmasını sağlayın. Bir parametre kullanılmadığında, derleyici bir uyarı verir; çünkü bu durum genellikle, parametre adı ile özellik adı arasında bir yazım hatası veya uyumsuzluk olduğunu ve bu nedenle özelliğin başlatılmamış kalacağını gösterir (CS8907).
- Kayıtta bildirilen alanın türünü bu bağlamda geçerli bir türle değiştirin. Kayıt türleri tüm alanların yığın ayırma ve değer tabanlı eşitlik (
Span<T>) ile uyumlu olmasını gerektirdiği için, veya diğerref structtürler gibi bazı türler kayıtta alan olarak kullanılamaz. - Türetilmiş bir kayıttaki, temel kaydın konumsal üyesini gizleyen üyeden
newdeğiştiricisini kaldırın. Konumsal üye gizlendiğinde, derleyici, birleştirilmişDeconstructyöntemi ve konumsal desen eşleştirmeyi (CS8913) bozan ilgili özelliğiyle konumsal parametreyi eşleştiremez.
Eşitlik üyeleri
- CS8851: 'türü', 'Equals' tanımlar fakat 'GetHashCode' tanımlamaz
-
CS8857: bir
withifadenin alıcısı geçersiz olmayan bir türe sahip olmalıdır. - CS8858: 'type' alıcı türü geçerli bir kayıt türü değil ve yapı türü değil.
Kayıt türleri yerleşik değer tabanlı eşitlik sağlar. Bu tanılamalar, bildirimleriniz eşitlik sözleşmesiyle çakıştığında ortaya çıkar. Eşitlik kurallarının tamamı için bkz. eşitlik karşılaştırmaları.
Bu hataları düzeltmek için aşağıdaki değişiklikleri uygulayın:
-
GetHashCodeYöntemini her tanımladığınızda birEqualsyöntem ekleyin. Eşitlik sözleşmesi, eşit olarak kabul edilen nesnelerin aynı karma kodu üretmesini gerektirir, bu nedenle derleyici bu iki yöntemin her zaman birlikte tanımlanmasını zorunlu kılar (CS8851). - İfadenin alıcısını
withkayıt türü veya yapı türü olacak şekilde değiştirin.withifadesi, türler içinstructdeğer kopyalama semantiğini veyarecordkopya oluşturucuyu kullanarak değiştirilmiş bir kopya oluşturur (CS8858). -
bir
withifadenin alıcısının boş olmayan bir türe sahip olduğundan emin olun. İfade,withalıcının yeni bir kopyasını oluşturur, bu nedenle alıcının kopyalanabilir bir değere (CS8857) değerlendirmesi gerekir.
Kayıt devralma
- CS8864: Kayıtlar yalnızca nesneden veya başka bir kayıttan devralabilir
- CS8865: Kayıtlardan yalnızca kayıtlar devralabilir.
Kayıt sınıfı türleri belirli devralma kurallarını izler. Kuralların tamamı için C# dil belirtimindeki kayıt belirtimine bakın.
Bu hataları düzeltmek için aşağıdaki değişiklikleri uygulayın:
- Bir kayıt sınıfının temel türünü,
objectveya başka bir kayıt sınıfından devralacak şekilde değiştirin. Kayıt türleri, yalnızca diğer kayıt türleriyle uyumlu olan eşitlik ve kopyalama için derleyici tarafından sentezlenen üyelere güvenir, bu nedenle derleyici bir kaydın kayıt dışı bir sınıftan (CS8864) devralmasına izin vermez. - Kayıt sınıfından devralan kayıt olmayan bir sınıfı, bunun yerine bir kayıt sınıfı olarak bildirmek üzere değiştirin. Kayıt türleri eşitliği, kopyalamayı ve tutarlı bir devralma zincirine bağımlı olan diğer üyeleri sentezlediğinden, derleyici hiyerarşideki her türün bir kayıt sınıfı (CS8865) olmasını gerektirir. Kayıt yapısı türleri, arabirimleri uygulamanın ötesinde devralma hiyerarşilerine katılamaz.
Ayrılmış üye adları
- CS8859: 'Clone' adlı üyelere kayıtlarda izin verilmiyor.
- CS8860: Türler ve takma adlar 'record' olarak adlandırılmamalıdır.
Derleyici, kayıt tipleriyle kullanmak üzere belirli adları ayırır. Kuralların tamamı için C# dil belirtimindeki kayıt belirtimine bakın.
Bu hataları düzeltmek için aşağıdaki değişiklikleri uygulayın:
- Kayıt türünde adı verilen
Cloneherhangi bir üyeyi farklı bir adla yeniden adlandırın. Derleyici, ifadeler için kopyalama semantiğini uygulamak amacıylaClonedahili olarak kullanırwith, bu nedenle kendi üyenizi bildirmek sentezlenmiş uygulamayla (Clone) çakışıyor. -
recordadlı herhangi bir tür veya takma adın ismini değiştirin.recordKayıt türlerini bildirmek için kullanılan bağlamsal bir anahtar sözcük olduğundan, türü veya diğer adırecordadlandırmak hem derleyicinin hem de kodu okuyan geliştiricilerin (CS8860) kafasını karıştırabilecek bir belirsizlik oluşturur.