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.
Kata
Kata init kunci mendefinisikan metode pengakses dalam properti atau pengindeks. Setter khusus init menetapkan nilai ke properti atau elemen pengindeks hanya selama konstruksi objek. Memberlakukan init kekekalan, sehingga setelah objek diinisialisasi, objek tidak dapat diubah. Aksesor init memungkinkan kode panggilan menggunakan penginisialisasi objek untuk mengatur nilai awal. Sebaliknya, properti yang diimplementasikan secara otomatis hanya dengan setter get harus diinisialisasi dengan memanggil konstruktor. Properti dengan private set aksesor dapat dimodifikasi setelah konstruksi, tetapi hanya di kelas .
Kode berikut menunjukkan aksesor init dalam properti yang diimplementasikan secara otomatis:
class Person_InitExampleAutoProperty
{
public int YearOfBirth { get; init; }
}
Anda mungkin perlu menerapkan salah satu pengakses untuk memberikan validasi parameter. Anda dapat melakukannya menggunakan field kata kunci, diperkenalkan di C# 14. Kata field kunci mengakses bidang backing yang disintesis kompilator untuk properti tersebut. Contoh berikut menunjukkan properti tempat init aksesor memvalidasi rentang value parameter."
class Person_InitExampleFieldProperty
{
public int YearOfBirth
{
get;
init
{
field = (value <= DateTime.Now.Year)
? value
: throw new ArgumentOutOfRangeException(nameof(value), "Year of birth can't be in the future");
}
}
}
Aksesor init dapat digunakan sebagai anggota bertubuh ekspresi. Contoh:
class Person_InitExampleExpressionBodied
{
private int _yearOfBirth;
public int YearOfBirth
{
get => _yearOfBirth;
init => _yearOfBirth = value;
}
}
Contoh berikut menentukan pengakses get dan init untuk properti bernama YearOfBirth. Contoh menggunakan bidang privat bernama _yearOfBirth untuk mendukung nilai properti.
class Person_InitExample
{
private int _yearOfBirth;
public int YearOfBirth
{
get { return _yearOfBirth; }
init { _yearOfBirth = value; }
}
}
Pengakses init tidak memaksa penelepon untuk mengatur properti. Sebaliknya, ini memungkinkan penelepon untuk menggunakan penginisialisasi objek sambil melarang modifikasi nanti. Anda dapat menambahkan pengubah required untuk memaksa penelepon mengatur properti. Contoh berikut menunjukkan satu-satunya init properti dengan tipe nilai nullable sebagai bidang cadangannya. Jika pemanggil tidak menginisialisasi YearOfBirth properti , properti tersebut memiliki nilai default null :
class Person_InitExampleNullability
{
private int? _yearOfBirth;
public int? YearOfBirth
{
get => _yearOfBirth;
init => _yearOfBirth = value;
}
}
Untuk memaksa penelepon mengatur nilai awal non-null, Anda menambahkan pengubah required , seperti yang ditunjukkan dalam contoh berikut:
class Person_InitExampleNonNull
{
private int _yearOfBirth;
public required int YearOfBirth
{
get => _yearOfBirth;
init => _yearOfBirth = value;
}
}
Contoh berikut menunjukkan perbedaan antara private setproperti , baca saja, dan init . Baik versi set privat maupun versi baca saja mengharuskan penelepon untuk menggunakan konstruktor yang ditambahkan untuk mengatur properti nama. Versi ini private set memungkinkan seseorang untuk mengubah namanya setelah instans dibuat. Versi init tidak memerlukan konstruktor. Penelepon dapat menginisialisasi properti menggunakan penginisialisasi objek:
class PersonPrivateSet
{
public string FirstName { get; private set; }
public string LastName { get; private set; }
public PersonPrivateSet(string first, string last) => (FirstName, LastName) = (first, last);
public void ChangeName(string first, string last) => (FirstName, LastName) = (first, last);
}
class PersonReadOnly
{
public string FirstName { get; }
public string LastName { get; }
public PersonReadOnly(string first, string last) => (FirstName, LastName) = (first, last);
}
class PersonInit
{
public string FirstName { get; init; }
public string LastName { get; init; }
}
PersonPrivateSet personPrivateSet = new("Bill", "Gates");
PersonReadOnly personReadOnly = new("Bill", "Gates");
PersonInit personInit = new() { FirstName = "Bill", LastName = "Gates" };
Spesifikasi bahasa C#
Untuk informasi selengkapnya, lihat Spesifikasi Bahasa C#. Spesifikasi bahasa adalah sumber definitif untuk sintaks dan penggunaan C#.