Bagikan melalui


Properti yang diimplementasikan secara otomatis

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 pengakses init (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.

Lihat juga