Türlerle ref struct ilişkili hatalar ve uyarılar

  • CS8343: ref structs arabirimler uygulanamıyor
  • CS8344: foreach deyimi, izin veren ref structbir ref struct veya tür parametresi olduğundan zaman uyumsuz veya yineleyici yöntemlerindeki numaralandırıcılar üzerinde çalışamaz.
  • CS8345: Alan veya otomatik uygulanan özellik, bir ref structörneğin üyesi olmadığı sürece türünde olamaz.
  • CS9048: scoped Değiştirici yalnızca ref'ler ve ref struct değerler için kullanılabilir.
  • CS9050: Bir ref alan öğesine ref structbaşvuramaz.
  • CS9059: Başvuru alanı yalnızca bir başvuru yapısında bildirilebilir.
  • CS9241: 'başvuru yapısı' zaten belirtilmiş.
  • CS9242: 'allows' constraint yan tümcesi belirtilen son kısıtlama olmalıdır.
  • CS9243: Diğer kısıtlamalardan bilinen bir tür parametresi için başvuru yapılarının sınıf olmasına izin verilemez.
  • CS9244: Tür, genel tür veya yöntemde parametre olarak kullanmak için başvuru yapılarına izin veren bir ref struct veya tür parametresi olmayabilir.
  • CS9245: Tür, tür için ref struct arabirim üyesi uygulayamaz.
  • CS9246: Sanal olmayan örnek arabirimi üyesine başvuru yapısına izin veren bir tür parametresinde erişilemez.
  • CS9247: foreach deyimi, başvuru yapısına izin veren bir tür parametresi olduğundan ve derleme zamanında uygulaması IDisposablebilinmediğinden türün numaralandırıcılarında çalışamaz.
  • CS9267: Yineleyicinin öğe türü bir başvuru yapısı veya başvuru yapılarına izin veren bir tür parametresi olmayabilir

başvuru güvenliği ihlalleri

  • CS8345: Alan veya otomatik uygulanan özellik, bir ref structörneğin üyesi olmadığı sürece türünde olamaz.
  • CS9048: scoped Değiştirici yalnızca ref'ler ve ref struct değerler için kullanılabilir.
  • CS9050: Bir ref alan öğesine ref structbaşvuramaz.
  • CS9059: Bir ref alan yalnızca içinde ref structbildirilebilir.

Bir ref struct tür alanları içerebilir ref . Diğer türlere izin verilmez ref . Derleyici, herhangi bir ref struct türdeki örneklerde başvuru güvenliği kurallarını zorunlu kılmak için bildirimleri ve türlerin kullanımını ref struct kısıtlamalarını zorunlu kılar:

  • Yalnızca ref struct türler otomatik olarak uygulanan ref özellikler içerebilir.
  • Yalnızca ref struct türler veya ref değişkenler değiştiriciye scoped sahip olabilir.
  • Bir ref alan yalnızca bir ref struct türde bildirilebilir.
  • Alan ref bir türe ref struct başvuramaz/

Bu kurallardan herhangi birinin ihlali, listelenen hatalardan birini oluşturur. Bu dil özelliğini kullanmayı amaçladıysanız, türünü olarak ref structdönüştürün. Aksi takdirde, izin verilmeyen yapıyı kaldırın.

başvuru yapısı arabirim uygulamaları

  • CS8343: ref structs arabirimler uygulanamıyor
  • CS8344: foreach deyimi, izin veren ref structbir ref struct veya tür parametresi olduğundan zaman uyumsuz veya yineleyici yöntemlerindeki numaralandırıcılar üzerinde çalışamaz.
  • CS9241: 'başvuru yapısı' zaten belirtilmiş.
  • CS9242: 'allows' constraint yan tümcesi belirtilen son kısıtlama olmalıdır.
  • CS9243: Diğer kısıtlamalardan bilinen bir tür parametresi için başvuru yapılarının sınıf olmasına izin verilemez.
  • CS9244: Tür, genel tür veya yöntemde parametre olarak kullanmak için başvuru yapılarına izin veren bir ref struct veya tür parametresi olmayabilir.
  • CS9245: Tür, tür için ref struct arabirim üyesi uygulayamaz.
  • CS9246: Sanal olmayan örnek arabirimi üyesine başvuru yapısına izin veren bir tür parametresinde erişilemez.
  • CS9247: foreach deyimi, başvuru yapısına izin veren bir tür parametresi olduğundan ve derleme zamanında uygulaması IDisposablebilinmediğinden türün numaralandırıcılarında çalışamaz.
  • CS9267: Yineleyicinin öğe türü bir başvuru yapısı veya başvuru yapılarına izin veren bir tür parametresi olmayabilir

C# 13'e başlamadan önce türler ref struct arabirimleri uygulayamaz; derleyici CS8343 oluşturur. C# 13'le başlayarak, ref struct türler aşağıdaki kurallara tabi olan arabirimleri uygulayabilir:

  • A ref struct , uyguladığı bir arabirimin örneğine dönüştürülemez. Bu kısıtlama, parametre bir arabirim türü olduğunda bağımsız değişken olarak bir ref struct tür kullandığınızda örtük dönüştürmeyi içerir. Dönüştürme, başvuru güvenliğini ihlal eden bir kutulama dönüştürmesine neden olur.
  • Bir ref struct arabirim uygulayan tüm arabirim üyelerini uygulamalıdır . , ref struct arabiriminin varsayılan bir uygulama içerdiği üyeleri uygulamalıdır.

C# 13'le başlayarak, ref struct genel tür parametresinde kısıtlama önleme varsa ve varsa, genel tür parametresi allows ref struct için tür bağımsız değişkeni olarak kullanılabilir. Kısıtlama önlemeyi allows ref struct kullandığınızda şu kurallara uymanız gerekir:

  • Aref struct, tür bağımsız değişkeni olarak kullanılır, tür parametresinde kısıtlama önleme bulunmalıdırallows ref struct.- Kısıtlama allows ref struct önleme, bu parametrenin where yan tümcesinde son olmalıdır
  • Tür parametresinin başvuru güvenliği kurallarına uyması gereken örneklerin kullanımları.
  • Tür ref struct olabilecek bir ref struct veya türü bağımsız değişkeni, yineleyici yöntemi için öğe türü olarak kullanılamaz.