Bagikan melalui


Konstruktor (panduan pemrograman C#)

Konstruktor adalah metode yang dipanggil oleh runtime saat instans kelas atau struct dibuat. Kelas atau struktur dapat memiliki beberapa konstruktor yang mengambil argumen yang berbeda. Konstruktor memungkinkan Anda memastikan bahwa instans jenis tersebut valid saat dibuat. Untuk informasi dan contoh selengkapnya, lihat konstruktor instance dan Menggunakan konstruktor.

Ada beberapa tindakan yang merupakan bagian dari menginisialisasi instans baru. Tindakan berikut terjadi dalam urutan berikut:

  1. kolom Instans disetel ke 0. Inisialisasi ini biasanya dilakukan oleh runtime.
  2. penginisialisasi Bidang menjalankan. Penginisialisasi bidang dalam jenis eksekusi yang paling turunan.
  3. Penginisialisasi lapangan tipe dasar dijalankan. Penginisialisasi atribut mulai dari basis langsung lalu melalui setiap tipe dasar ke System.Object.
  4. Konstruktor instans dasar berjalan. Setiap konstruktor instans, dimulai dari Object.Object dan melanjutkan melalui setiap kelas dasar hingga mencapai kelas dasar langsung.
  5. Konstruktor instans dijalankan. Konstruktor instans untuk tipe dijalankan.
  6. Penginisialisasi objek dijalankan. Jika ekspresi menyertakan penginisialisasi objek apa pun, ini akan dijalankan setelah konstruktor instance selesai dijalankan. Penginisialisasi objek berjalan dalam urutan tekstual.

Tindakan sebelumnya terjadi saat instans dibuat menggunakan operator new. Jika instans baru struct diatur ke nilai default, semua bidang instans diatur ke 0. Elemen array diatur ke nilai default 0 atau null saat array dibuat.

Konstruktor statis , jika ada, berjalan sebelum semua tindakan konstruktor instans terjadi untuk setiap instans dari tipe tersebut. Konstruktor statis berjalan maksimal sekali.

Dimulai dengan C# 14, Anda dapat mendeklarasikan konstruktor instans sebagai anggota parsial. Konstruktor parsial harus memiliki deklarasi yang mendeklarasikan dan mengimplementasikan.

Sintaks konstruktor

Konstruktor adalah metode dengan nama yang sama dengan jenisnya. Deklarasi metode dapat mencakup pengubah akses opsional , nama metode, dan daftar parameternya; ini tidak menyertakan jenis pengembalian. Contoh berikut menunjukkan konstruktor untuk sebuah kelas bernama Person.

public class Person
{
   private string last;
   private string first;

   public Person(string lastName, string firstName)
   {
      last = lastName;
      first = firstName;
   }

   // Remaining implementation of Person class.
}

Jika konstruktor dapat diimplementasikan sebagai pernyataan tunggal, Anda dapat menggunakan anggota isi ekspresi . Contoh berikut mendefinisikan Location kelas yang konstruktornya memiliki parameter string tunggal, name. Definisi isi ekspresi menetapkan argumen ke bidang locationName.

public class Location
{
   private string locationName;

   public Location(string name) => Name = name;

   public string Name
   {
      get => locationName;
      set => locationName = value;
   }
}

Jika jenis memerlukan parameter untuk membuat instans, Anda dapat menggunakan konstruktor utama untuk menunjukkan bahwa satu atau beberapa parameter diperlukan untuk membuat instans jenis, seperti yang ditunjukkan dalam contoh berikut:

public class LabelledContainer<T>(string label)
{
   public string Label { get; } = label;
   public required T Contents 
   { 
      get;
      init;
   }
}

Anda memperbolehkan mendeklarasikan konstruktor utama pada tipe partial. Hanya satu deklarasi konstruktor utama yang diizinkan. Dengan kata lain, hanya satu deklarasi dari jenis partial yang dapat menyertakan parameter untuk konstruktor utama.

Konstruktor statis

Contoh sebelumnya menunjukkan konstruktor instans, yang menginisialisasi objek baru. Kelas atau struktur juga dapat mendeklarasikan konstruktor statis, yang menginisialisasi anggota statis dari jenis tersebut. Konstruktor statis tidak memiliki parameter. Jika Anda tidak menyediakan konstruktor statis untuk menginisialisasi bidang statis, pengkompilasi C# menginisialisasi bidang statis ke nilai defaultnya seperti yang tercantum dalam Nilai default jenis C# artikel.

Contoh berikut menggunakan konstruktor statis untuk menginisialisasi bidang statis.

public class Adult : Person
{
   private static int minimumAge;

   public Adult(string lastName, string firstName) : base(lastName, firstName)
   { }

   static Adult() => minimumAge = 18;

   // Remaining implementation of Adult class.
}

Anda juga dapat menentukan konstruktor statis dengan definisi isi ekspresi, seperti yang ditunjukkan contoh berikut.

public class Child : Person
{
   private static int maximumAge;

   public Child(string lastName, string firstName) : base(lastName, firstName)
   { }

   static Child() => maximumAge = 18;

   // Remaining implementation of Child class.
}

Untuk informasi dan contoh selengkapnya, lihat Konstruktor Statis.

Konstruktor parsial

Dimulai dengan C# 14, Anda dapat mendeklarasikan konstruktor parsial di kelas atau struktur parsial. Setiap konstruktor parsial harus memiliki deklarasi yang menentukan dan deklarasi penerapan. Tanda tangan konstruktor parsial yang mendeklarasikan dan menerapkan harus cocok sesuai dengan aturan anggota parsial. Deklarasi yang mendefinisikan konstruktor parsial tidak dapat menggunakan inisialisasi konstruktor : base() atau : this(). Setiap inisialisasi konstruktor yang Anda tambahkan harus ditambahkan pada deklarasi penerapan.

Lihat juga