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.
Pengubah required menunjukkan bahwa bidang atau properti yang diterapkannya harus diinisialisasi oleh penginisialisasi objek. Ekspresi apa pun yang menginisialisasi instans baru dari jenis tertentu harus menginisialisasi semua anggota yang diperlukan tersebut. Pengubah required tersedia dimulai dengan C# 11.
Referensi bahasa C# mendokumentasikan versi bahasa C# yang paling baru dirilis. Ini juga berisi dokumentasi awal untuk fitur dalam pratinjau publik untuk rilis bahasa yang akan datang.
Dokumentasi mengidentifikasi fitur apa pun yang pertama kali diperkenalkan dalam tiga versi terakhir bahasa atau dalam pratinjau publik saat ini.
Petunjuk / Saran
Untuk menemukan kapan fitur pertama kali diperkenalkan di C#, lihat artikel tentang riwayat versi bahasa C#.
Dengan menggunakan pengubah required , pengembang dapat membuat jenis di mana properti atau bidang harus diinisialisasi dengan benar, namun masih mengizinkan inisialisasi melalui penginisialisasi objek. Beberapa aturan memastikan perilaku ini:
- Terapkan pengubah
requiredke bidang dan properti yang dideklarasikan dalamstructdanclassjenis, termasukrecordjenis danrecord struct. Anda tidak dapat menerapkan pengubahrequiredke anggotainterface. - Anda tidak dapat menandai implementasi antarmuka eksplisit sebagai
required. Anda tidak dapat mengaturnya dalam penginisialisasi objek. - Anda harus menginisialisasi anggota yang diperlukan, tetapi Anda dapat menginisialisasi mereka ke
null. Jika jenisnya adalah jenis referensi yang tidak dapat diubah ke null, pengkompilasi mengeluarkan peringatan jika Anda menginisialisasi anggota untuknull. Pengkompilasi mengeluarkan kesalahan jika anggota tidak diinisialisasi sama sekali. - Anggota yang diperlukan harus setidaknya terlihat seperti jenis yang berisi. Misalnya, kelas
publictidak dapat berisi bidangrequiredyangprotected. Selain itu, properti yang diperlukan harus memiliki setter (setatau aksesorinit) yang setidaknya terlihat seperti jenis yang berisi. Kode yang membuat instans tidak dapat mengatur anggota yang tidak dapat diakses. - Kelas turunan tidak dapat menyembunyikan anggota
requiredyang dideklarasikan di kelas dasar. Menyembunyikan anggota yang diperlukan mencegah penelepon menggunakan penginisialisasi objek untuk itu. Selain itu, jenis turunan yang mengambil alih properti yang diperlukan harus menyertakan pengubahrequired. Jenis turunan tidak dapat menghapus statusrequired. Jenis turunan dapat menambahkan modifierrequiredsaat menggantikan properti. - Anda tidak dapat menggunakan jenis dengan anggota apa pun
requiredsebagai argumen jenis saat parameter jenis menyertakannew()batasan. Pengkompilasi tidak dapat memberlakukan bahwa semua anggota yang diperlukan diinisialisasi dalam kode generik. - Anda tidak dapat menggunakan pengubah
requiredpada deklarasi untuk parameter posisional pada rekaman. Anda dapat menambahkan deklarasi eksplisit untuk properti posisional yang menyertakan pengubahrequired.
Beberapa jenis, seperti rekaman posisional , menggunakan konstruktor utama untuk menginisialisasi properti posisional. Jika salah satu properti tersebut menyertakan pengubah required, konstruktor utama menambahkan atribut SetsRequiredMembers. Atribut ini menunjukkan bahwa konstruktor utama menginisialisasi semua anggota yang diperlukan. Anda dapat menulis konstruktor Anda sendiri dengan atribut System.Diagnostics.CodeAnalysis.SetsRequiredMembersAttribute. Namun, kompilator tidak memverifikasi bahwa konstruktor ini menginisialisasi semua anggota yang diperlukan. Sebaliknya, atribut menegaskan kepada pengkompilasi bahwa konstruktor menginisialisasi semua anggota yang diperlukan. Atribut SetsRequiredMembers menambahkan aturan ini ke konstruktor:
- Konstruktor yang menautkan ke konstruktor lain yang dianotasikan dengan atribut
SetsRequiredMembers, baikthis(), ataubase(), juga harus menyertakan atributSetsRequiredMembers. Hal itu memastikan bahwa pemanggil dapat menggunakan semua konstruktor yang sesuai dengan benar. - Konstruktor salinan yang dihasilkan untuk jenis
recordmemiliki atributSetsRequiredMembersditerapkan jika salah satu anggotanya adalahrequired.
Peringatan
Atribut SetsRequiredMembers menonaktifkan pemeriksaan kompilator bahwa semua required anggota diinisialisasi saat objek dibuat. Gunakan dengan hati-hati.
Kode berikut menunjukkan hierarki kelas yang menggunakan pengubah required untuk properti FirstName dan LastName:
public class Person
{
public Person() { }
[SetsRequiredMembers]
public Person(string firstName, string lastName) =>
(FirstName, LastName) = (firstName, lastName);
public required string FirstName { get; init; }
public required string LastName { get; init; }
public int? Age { get; set; }
}
public class Student : Person
{
public Student() : base()
{
}
[SetsRequiredMembers]
public Student(string firstName, string lastName) :
base(firstName, lastName)
{
}
public double GPA { get; set; }
}
Untuk informasi selengkapnya tentang anggota yang diperlukan, lihat spesifikasi fitur C#11 - Anggota yang diperlukan.