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.
Properti yang diterapkan secara otomatis membuat deklarasi properti lebih ringkas ketika tidak ada logika lain yang diperlukan di pengakses properti. Mereka juga memungkinkan kode klien untuk membuat objek. Saat Anda mendeklarasikan properti seperti yang ditunjukkan di dalam contoh berikut, kompilator membuat bidang dukungan anonim privat yang hanya dapat diakses melalui pengakses properti get
dan set
.
init
pengakses juga dapat dinyatakan sebagai properti yang diterapkan secara otomatis.
Contoh berikut menunjukkan kelas sederhana yang memiliki beberapa properti yang diterapkan secara otomatis:
// This class is mutable. Its data can be modified from
// outside the class.
public class Customer
{
// Auto-implemented properties for trivial get and set
public double TotalPurchases { get; set; }
public string Name { get; set; }
public int CustomerId { get; set; }
// Constructor
public Customer(double purchases, string name, int id)
{
TotalPurchases = purchases;
Name = name;
CustomerId = id;
}
// Methods
public string GetContactInfo() { return "ContactInfo"; }
public string GetTransactionHistory() { return "History"; }
// .. Additional methods, events, etc.
}
class Program
{
static void Main()
{
// Initialize a new object.
Customer cust1 = new Customer(4987.63, "Northwind", 90108);
// Modify a property.
cust1.TotalPurchases += 499.99;
}
}
Anda tidak dapat mendeklarasikan properti yang diimplementasikan secara otomatis di antarmuka. Properti yang diimplementasikan dan didukung bidang secara otomatis mendeklarasikan bidang dukungan instans privat, dan antarmuka tidak dapat mendeklarasikan bidang instans. Mendeklarasikan properti dalam antarmuka tanpa mendefinisikan isi mendeklarasikan properti dengan pengakses. Setiap jenis yang mengimplementasikan antarmuka tersebut harus mengimplementasikan properti tersebut.
Anda dapat menginisialisasi properti yang diimplementasikan secara otomatis mirip dengan bidang:
public string FirstName { get; set; } = "Jane";
Kelas yang ditampilkan di dalam contoh sebelumnya dapat diubah. Kode klien dapat mengubah nilai di dalam objek setelah pembuatan. Dalam kelas kompleks yang berisi perilaku (metode) dan data yang signifikan, sering kali perlu memiliki properti publik. Namun, untuk kelas kecil atau struct yang hanya merangkum sekumpulan nilai (data) dan memiliki sedikit atau tanpa perilaku sama sekali, Anda harus menggunakan salah satu opsi berikut untuk membuat objek tidak dapat diubah:
- Deklarasikan hanya pengakses
get
(tidak dapat diubah di mana-mana, kecuali oleh konstruktor). - Deklarasikan pengakses
get
dan pengaksesinit
(tidak dapat diubah di mana-mana kecuali selama konstruksi objek). - Deklarasikan pengakses
set
sebagai privat (tidak dapat diubah ke konsumen).
Untuk informasi selengkapnya, lihat Cara menerapkan kelas ringan dengan properti yang diimplementasikan secara otomatis.
Anda mungkin perlu menambahkan validasi ke properti yang diimplementasikan secara otomatis. C# 13 menambahkan properti yang didukung bidang sebagai fitur pratinjau. Anda menggunakan field
kata kunci untuk mengakses bidang backing yang disintesis kompilator dari properti yang diimplementasikan secara otomatis. Misalnya, Anda dapat memastikan bahwa FirstName
properti dalam contoh sebelumnya tidak dapat diatur ke null
atau string kosong:
public string FirstName
{
get;
set
{
field = (string.IsNullOrWhiteSpace(value) is false
? value
: throw new ArgumentException(nameof(value), "First name can't be whitespace or null"));
}
} = "Jane";
Fitur ini memungkinkan Anda menambahkan logika ke aksesor tanpa mengharuskan Anda untuk secara eksplisit mendeklarasikan bidang backing. Anda menggunakan field
kata kunci untuk mengakses bidang backing yang dihasilkan oleh pengkompilasi.
Penting
Kata field
kunci adalah fitur pratinjau di C# 13. Anda harus menggunakan .NET 9 dan mengatur elemen Anda <LangVersion>
ke preview
dalam file proyek Anda untuk menggunakan field
kata kunci kontekstual.
Anda harus berhati-hati menggunakan field
fitur kata kunci di kelas yang memiliki bidang bernama field
. Kata kunci baru field
membayangi bidang bernama field
dalam cakupan aksesor properti. Anda dapat mengubah nama field
variabel, atau menggunakan @
token untuk mereferensikan field
pengidentifikasi sebagai @field
. Anda dapat mempelajari lebih lanjut dengan membaca spesifikasi fitur untuk field
kata kunci.