Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Mengatasi kesalahan dan peringatan untuk
Artikel ini membahas kesalahan dan peringatan pengkompilasi berikut:
- CS0144: Tidak dapat membuat instans jenis abstrak atau antarmuka 'jenis'
- CS0712: Tidak dapat membuat instans kelas statis 'jenis'
- CS1526: Ekspresi baru memerlukan daftar argumen atau (), [], atau {} setelah jenis
- CS8181: 'new' tidak dapat digunakan dengan tipe tuple. Gunakan ekspresi literal tuple sebagai gantinya.
- CS8386: Pembuatan objek tidak valid
- CS8752: Tipe 'type' tidak dapat digunakan sebagai tipe target new()
- CS8753: Penggunaan new() tidak valid dalam konteks ini
- CS8754: Tidak ada jenis target untuk 'ekspresi'
Jenis yang tidak dapat diinstansiasi
- CS0144: Tidak dapat membuat instans jenis abstrak atau antarmuka 'jenis'
- CS0712: Tidak dapat membuat instans kelas statis 'jenis'
Operator new hanya dapat membuat instans jenis konkret dan non-statis. Bahasa ini melarang membuat instans kelas abstrak, antarmuka, dan kelas statis karena jenis ini tidak lengkap atau tidak dirancang untuk memiliki instans.
- Buat kelas konkret yang berasal dari kelas abstrak, atau buat kelas yang mengimplementasikan antarmuka, lalu buat jenis beton itu (CS0144). Anda tidak dapat menggunakan
newlangsung padaabstractkelas atau karenainterfacetidak menyediakan implementasi lengkap. Jika Anda memiliki tipe tersebut, Anda juga dapat menghapus pengubahabstractagar kelas dapat diinstansiasi secara langsung. -
newHapus ekspresi dan akses anggota kelas statis langsung melalui nama kelas (CS0712). Kelas statis hanya ada untuk mengelompokkan anggota statis dan tidak dapat dibuat instans. Jika Anda memerlukan instans, hapus pengubahstaticdari deklarasi kelas.
Untuk informasi selengkapnya, lihat kelas abstrak, antarmuka, dan Kelas Statis dan Anggota Kelas Statis.
new kesalahan sintaks ekspresi
- CS1526: Ekspresi baru memerlukan daftar argumen atau (), [], atau {} setelah jenis
- CS8181: 'new' tidak dapat digunakan dengan tipe tuple. Gunakan ekspresi literal tuple sebagai gantinya.
- CS8386: Pembuatan objek tidak valid
Kesalahan ini terjadi ketika sintaks new ekspresi salah bentuk atau saat Anda menggunakan new dengan jenis yang memerlukan sintaks pembuatan yang berbeda.
- Tambahkan daftar argumen
(), dimensi array[], atau penginisialisasi{}setelah nama jenis dalam ekspresinew(CS1526). Operatornewmemerlukan salah satu dari ini untuk menunjukkan bagaimana objek dibangun. Misalnya, tulisnew MyClass()alih-alihnew MyClass. - Ganti
new (int, string)(...)dengan ekspresi harfiah tuple seperti(1, "hello")(CS8181). Tipe tuple menggunakan sintaks literal khusus alih-alih operatornew. Untuk membuat tuple, gunakan nilai dalam tanda kurung secara langsung:(int X, string Y) point = (1, "hello");. - Pastikan ekspresi
newmenargetkan tipe yang dapat dikonstruksi dan valid (CS8386). Kesalahan ini terjadi ketika pengkompilasi tidak dapat menentukan pembuatan objek yang valid dari sintaks. Verifikasi bahwa Anda menggunakan nama jenis yang mendukung konstruksi, dan bahwa ekspresi selesai secara sintis.
Untuk informasi selengkapnya, lihat operator baru dan jenis Tuple.
Ekspresi berjenis new target
- CS8752: Tipe 'type' tidak dapat digunakan sebagai tipe target dari new()
- CS8753: Penggunaan new() tidak valid dalam konteks ini
- CS8754: Tidak ada jenis target untuk 'ekspresi'
Ekspresi yang diketik target new (diperkenalkan dalam C# 9) memungkinkan Anda menghilangkan nama jenis ketika pengompilasi dapat menyimpulkannya dari konteks, seperti dalam MyClass x = new();. Kesalahan ini terjadi ketika pengkompilasi tidak dapat menentukan jenis target yang valid atau ketika jenis yang disimpulkan tidak dapat dibangun.
- Gunakan nama tipe eksplisit alih-alih
new()bertipe target saat tipe target berupa antarmuka, kelas abstrak, kelas statis, atau tipe lain yang tidak dapat dikonstruksi (CS8752).new()yang ditentukan oleh tipe target menyimpulkan tipe dari ruas kiri, tetapi tipe yang disimpulkan harus berupa tipe konkret yang dapat diinstansiasi. Tulisnew ConcreteType()secara lengkap sebagai gantinya. - Pindahkan
new()ekspresi ke konteks di mana jenis target tersedia (CS8753). Jenis targetnewhanya valid dalam konteks di mana pengkompilasi dapat menentukan jenis, seperti deklarasi variabel dengan jenis eksplisit, ekspresi penugasan, pernyataan pengembalian dengan jenis pengembalian yang diketahui, atau posisi argumen dengan jenis parameter yang diketahui. Anda tidak dapat menggunakannew()dalam konteks sepertivar x = new();di mana tidak ada jenis target. - Berikan jenis eksplisit untuk
newekspresi ketika tidak ada jenis target yang dapat disimpulkan (CS8754). Kesalahan ini terjadi ketika Anda menggunakannew()dalam posisi di mana pengkompilasi tidak memiliki cara untuk menentukan jenis apa yang akan dibangun. Gantinew()dengannew ExplicitType(), atau deklarasikan variabel dengan jenis eksplisit daripadavar.
Untuk informasi selengkapnya, lihat ekspresi `new` bertipe target.