Bagikan melalui


Gunakan konstruktor (panduan pemrograman C#)

Saat kelas atau struct dibuat, runtime memanggil konstruktornya. Konstruktor memiliki nama yang sama dengan kelas atau struktur, dan mereka biasanya menginisialisasi anggota data objek baru.

Dalam contoh berikut, kelas bernama Taxi didefinisikan dengan menggunakan konstruktor sederhana. Kelas ini kemudian dibuat dengan operator new. Runtime memanggil konstruktor Taxi segera setelah memori dialokasikan untuk objek baru.

public class Taxi
{
    private string taxiTag;

    public Taxi(string tag) => taxiTag = tag;

    public override string ToString() => $"Taxi: {taxiTag}";
}

class TestTaxi
{
    static void Main()
    {
        Taxi t = new Taxi("Tag1345");
        Console.WriteLine(t);
    }
}

Konstruktor yang tidak mengambil parameter disebut konstruktor tanpa parameter . Runtime memanggil konstruktor tanpa parameter saat objek dibuat menggunakan operator new dan tidak ada argumen yang disediakan untuk new. C# 12 memperkenalkan konstruktor utama . Konstruktor utama menentukan parameter yang harus disediakan untuk menginisialisasi objek baru. Untuk informasi lebih lanjut, lihat Konstruktor Instance .

Kecuali kelas statis, kelas tanpa konstruktor diberikan konstruktor tanpa parameter publik oleh kompilator C# untuk mengaktifkan instansiasi kelas. Untuk informasi selengkapnya, lihat Kelas Statis dan Anggota Kelas Statis.

Anda dapat mencegah instansiasi kelas dengan membuat konstruktor privat, sebagai berikut:

class NLog
{
    // Private Constructor:
    private NLog() { }

    public static double e = Math.E;  //2.71828...
}

Untuk informasi selengkapnya, lihat Konstruktor Pribadi.

Konstruktor untuk jenis struktur menyerupai konstruktor kelas. Ketika jenis struct dibuat dengan new, runtime memanggil konstruktor. Saat struct diatur ke nilai default, runtime menginisialisasi semua memori dalam struct ke 0. Jika Anda mendeklarasikan penginisialisasi bidang apa pun dalam jenis struct, Anda harus menyediakan konstruktor tanpa parameter. Untuk informasi selengkapnya, lihat bagian inisialisasi Struct dan nilai default dari artikel Jenis struktur .

Kode berikut menggunakan konstruktor tanpa parameter untuk Int32, sehingga Anda yakin bahwa bilangan bulat diinisialisasi:

int i = new int();
Console.WriteLine(i);

Namun, kode berikut menyebabkan kesalahan pengkompilasi karena tidak menggunakan new, dan karena mencoba menggunakan objek yang tidak diinisialisasi:

int i;
Console.WriteLine(i);

Atau, beberapa jenis struct (termasuk semua jenis numerik bawaan) dapat diinisialisasi atau ditetapkan lalu digunakan seperti dalam contoh berikut:

int a = 44;  // Initialize the value type...
int b;
b = 33;      // Or assign it before using it.
Console.WriteLine("{0}, {1}", a, b);

Kedua kelas dan struktur dapat menentukan konstruktor yang mengambil parameter, termasuk konstruktor utama. Konstruktor yang mengambil parameter harus dipanggil dengan menggunakan pernyataan new atau pernyataan dasar . Kelas dan struktur juga dapat menentukan beberapa konstruktor, dan tidak diperlukan untuk menentukan konstruktor tanpa parameter. Misalnya:

public class Employee
{
    public int Salary;

    public Employee() { }

    public Employee(int annualSalary) => Salary = annualSalary;

    public Employee(int weeklySalary, int numberOfWeeks) => Salary = weeklySalary * numberOfWeeks;
}

Kelas ini dapat dibuat dengan menggunakan salah satu pernyataan berikut:

Employee e1 = new Employee(30000);
Employee e2 = new Employee(500, 52);

Konstruktor dapat menggunakan kata kunci base untuk memanggil konstruktor kelas dasar. Misalnya:

public class Manager : Employee
{
    public Manager(int annualSalary)
        : base(annualSalary)
    {
        //Add further instructions here.
    }
}

Dalam contoh ini, konstruktor untuk kelas dasar dipanggil sebelum blok konstruktor dijalankan. Kata kunci base dapat digunakan dengan atau tanpa parameter. Parameter apa pun untuk konstruktor dapat digunakan sebagai parameter untuk baseatau sebagai bagian dari ekspresi. Untuk informasi selengkapnya, lihat dasar.

Di kelas turunan, jika konstruktor kelas dasar tidak dipanggil secara eksplisit dengan menggunakan kata kunci base, konstruktor tanpa parameter, jika ada, dipanggil secara implisit. Deklarasi konstruktor berikut secara efektif sama:

public Manager(int initialData)
{
    //Add further instructions here.
}
public Manager(int initialData)
    : base()
{
    //Add further instructions here.
}

Jika kelas dasar tidak menawarkan konstruktor tanpa parameter, kelas turunan harus melakukan panggilan eksplisit ke konstruktor dasar dengan menggunakan base.

Konstruktor dapat memanggil konstruktor lain dalam objek yang sama dengan menggunakan kata kunci this. Seperti base, this dapat digunakan dengan atau tanpa parameter, dan parameter apa pun dalam konstruktor tersedia sebagai parameter untuk this, atau sebagai bagian dari ekspresi. Misalnya, konstruktor kedua dalam contoh sebelumnya dapat ditulis ulang menggunakan this:

public Employee(int weeklySalary, int numberOfWeeks)
    : this(weeklySalary * numberOfWeeks)
{
}

Penggunaan kata kunci this dalam contoh sebelumnya menyebabkan konstruktor berikut dipanggil:

public Employee(int annualSalary) => Salary = annualSalary;

Konstruktor dapat ditandai sebagai public, private, protected, internal, internal yang dilindungi, atau private protected. Pengubah akses ini menentukan bagaimana pengguna kelas dapat membangun kelas. Untuk informasi selengkapnya, lihat Pengubah Akses .

Konstruktor dapat dinyatakan statis dengan menggunakan kata kunci static. Konstruktor statis dipanggil secara otomatis, sebelum bidang statis diakses, dan digunakan untuk menginisialisasi anggota kelas statis. Untuk informasi selengkapnya, lihat Konstruktor Statis.

Spesifikasi Bahasa C#

Untuk informasi selengkapnya, lihat konstruktor instan dan konstruktor statis dalam Spesifikasi Bahasa C#. Spesifikasi bahasa adalah sumber definitif untuk sintaks dan penggunaan C#.

Lihat juga