Baca dalam bahasa Inggris

Bagikan melalui


Kesalahan dan peringatan yang terkait dengan ref struct jenis

  • CS8343: ref structs tidak dapat menerapkan antarmuka
  • CS8344: foreach pernyataan tidak dapat beroperasi pada enumerator dalam metode asinkron atau iterator karena jenis adalah ref struct parameter jenis atau yang memungkinkan ref struct.
  • CS8345: Bidang atau properti yang diimplementasikan secara otomatis tidak boleh berjenis kecuali merupakan anggota instans dari ref struct.
  • CS9048: Pengubah scoped hanya dapat digunakan untuk ref dan ref struct nilai.
  • CS9050: Bidang ref tidak dapat merujuk ke ref struct.
  • CS9059: Bidang ref hanya dapat dideklarasikan dalam struktur ref.
  • CS9241: 'ref struct' sudah ditentukan.
  • CS9242: Klausul batasan 'memungkinkan' harus menjadi batasan terakhir yang ditentukan.
  • CS9243: Tidak dapat mengizinkan struct ref untuk parameter jenis yang diketahui dari batasan lain menjadi kelas.
  • CS9244: Jenis mungkin bukan ref struct parameter atau jenis yang memungkinkan struct ref untuk menggunakannya sebagai parameter dalam jenis atau metode generik.
  • CS9245: Jenis tidak dapat menerapkan anggota antarmuka untuk ref struct jenis.
  • CS9246: Anggota antarmuka instans non-virtual tidak dapat diakses pada parameter jenis yang memungkinkan struct ref.
  • CS9247: pernyataan foreach tidak dapat beroperasi pada enumerator jenis karena merupakan parameter jenis yang memungkinkan struct ref dan tidak diketahui pada waktu kompilasi untuk mengimplementasikan IDisposable.
  • CS9267: Jenis elemen iterator mungkin bukan struct ref atau parameter jenis yang memungkinkan struct ref

pelanggaran keamanan ref

  • CS8345: Bidang atau properti yang diimplementasikan secara otomatis tidak boleh berjenis kecuali merupakan anggota instans dari ref struct.
  • CS9048: Pengubah scoped hanya dapat digunakan untuk ref dan ref struct nilai.
  • CS9050: Bidang ref tidak dapat merujuk ke ref struct.
  • CS9059: Bidang ref hanya dapat dideklarasikan dalam ref struct.

Jenis ref struct dapat menyertakan ref bidang. Jenis lain tidak diizinkan ref bidang. Kompilator memberlakukan pembatasan pada deklarasi dan penggunaan jenis ref struct untuk memberlakukan aturan keamanan ref pada instans jenis apa pun ref struct :

  • Hanya ref struct jenis yang dapat berisi properti yang diimplementasikan ref secara otomatis.
  • Hanya ref struct jenis atau ref variabel yang dapat memiliki pengubah scoped .
  • Bidang ref hanya dapat dideklarasikan dalam tipe ref struct .
  • Bidang ref tidak dapat merujuk ke ref struct jenis/

Melanggar salah satu aturan ini menghasilkan salah satu kesalahan yang tercantum. Jika Anda bermaksud menggunakan fitur bahasa tersebut, konversikan jenisnya menjadi ref struct. Jika tidak, hapus konstruksi yang tidak diizinkan.

ref membangun implementasi antarmuka

  • CS8343: ref structs tidak dapat menerapkan antarmuka
  • CS8344: foreach pernyataan tidak dapat beroperasi pada enumerator dalam metode asinkron atau iterator karena jenis adalah ref struct parameter jenis atau yang memungkinkan ref struct.
  • CS9241: 'ref struct' sudah ditentukan.
  • CS9242: Klausul batasan 'memungkinkan' harus menjadi batasan terakhir yang ditentukan.
  • CS9243: Tidak dapat mengizinkan struct ref untuk parameter jenis yang diketahui dari batasan lain menjadi kelas.
  • CS9244: Jenis mungkin bukan ref struct parameter atau jenis yang memungkinkan struct ref untuk menggunakannya sebagai parameter dalam jenis atau metode generik.
  • CS9245: Jenis tidak dapat menerapkan anggota antarmuka untuk ref struct jenis.
  • CS9246: Anggota antarmuka instans non-virtual tidak dapat diakses pada parameter jenis yang memungkinkan struct ref.
  • CS9247: pernyataan foreach tidak dapat beroperasi pada enumerator jenis karena merupakan parameter jenis yang memungkinkan struct ref dan tidak diketahui pada waktu kompilasi untuk mengimplementasikan IDisposable.
  • CS9267: Jenis elemen iterator mungkin bukan struct ref atau parameter jenis yang memungkinkan struct ref

Sebelum C# 13, ref struct jenis tidak dapat menerapkan antarmuka; pengkompilasi menghasilkan CS8343. Dimulai dengan C# 13, ref struct jenis dapat menerapkan antarmuka, tunduk pada aturan berikut:

  • ref struct Tidak dapat dikonversi ke instans antarmuka yang diimplementasikannya. Pembatasan ini mencakup konversi implisit saat Anda menggunakan ref struct jenis sebagai argumen saat parameter adalah jenis antarmuka. Konversi menghasilkan konversi tinju, yang melanggar keamanan ref.
  • ref struct Yang mengimplementasikan antarmuka harus mengimplementasikan semua anggota antarmuka. harus ref struct mengimplementasikan anggota di mana antarmuka menyertakan implementasi default.

Dimulai dengan C# 13, ref struct dapat digunakan sebagai argumen jenis untuk parameter jenis generik, jika dan hanya jika parameter jenis generik memiliki allows ref struct anti-batasan. Saat Anda menggunakan allows ref struct anti-batasan, Anda harus mengikuti aturan ini:

  • Digunakan ref struct sebagai argumen jenis, parameter jenis harus memiliki allows ref struct anti-batasan.- allows ref struct Anti-batasan harus terakhir dalam klausul untuk parameter tersebut where
  • Penggunaan instans parameter jenis harus mematuhi aturan keamanan ref.
  • Argumen ref struct jenis atau yang dapat berupa ref struct jenis tidak dapat digunakan sebagai jenis elemen untuk metode iterator.