Bagikan melalui


Menggunakan Konstruktor (Panduan Pemrograman C#)

Setiap kali kelas atau struktur dibuat, konstruktornya akan dipanggil. 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 baru. Taxi Konstruktor dipanggil oleh new operator segera setelah memori dialokasikan untuk objek baru.

public class Taxi
{
    public bool IsInitialized;

    public Taxi()
    {
        IsInitialized = true;
    }
}

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

Konstruktor yang tidak mengambil parameter disebut konstruktor tanpa parameter. Konstruktor tanpa parameter dipanggil setiap kali objek dibuat dengan menggunakan new operator 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 selengkapnya, lihat Konstruktor.

Kecuali kelas bersifat statis, kelas tanpa konstruktor diberikan konstruktor tanpa parameter publik oleh pengkompilasi C# untuk mengaktifkan instantiasi kelas. Untuk informasi lebih lanjut, lihat Kelas Statik dan Anggota Kelas Statik.

Anda dapat mencegah kelas dibuat instans 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.

Konstruktor untuk jenis struct menyerupai konstruktor kelas. Ketika jenis struct dibuat dengan new, konstruktor dipanggil. struct Ketika diatur ke nilainyadefault, runtime menginisialisasi semua memori dalam struktur ke 0. Sebelum C# 10, structs tidak boleh berisi konstruktor tanpa parameter eksplisit karena konstruktor disediakan secara otomatis oleh pengkompilasi. Untuk informasi lebih lanjut, lihat bagian Inisialisasi struktur 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 pengompilasi karena tidak menggunakan new, dan karena mencoba menggunakan objek yang belum diinisialisasi:

int i;
Console.WriteLine(i);

Atau, objek berdasarkan structs (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 melalui new pernyataan atau pernyataan dasar. Kelas dan struktur juga dapat menentukan beberapa konstruktor, dan tidak diperlukan untuk menentukan konstruktor tanpa parameter. Contohnya:

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 base kata kunci untuk memanggil konstruktor kelas dasar. Contohnya:

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

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

Di kelas turunan, jika konstruktor kelas dasar tidak dipanggil secara eksplisit menggunakan kata kunci base, konstruktor tanpa parameter, jika ada, akan 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 menggunakan base.

Konstruktor dapat memanggil konstruktor lain dalam objek yang sama dengan menggunakan kata kunci ini. 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 this kata kunci dalam contoh sebelumnya menyebabkan konstruktor ini dipanggil:

public Employee(int annualSalary)
{
    Salary = annualSalary;
}

Konstanta dapat ditandai sebagai public, private, protected, internal, protected internal 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 statis. Konstruktor statis dipanggil secara otomatis, segera sebelum bidang statis diakses, dan digunakan untuk menginisialisasi anggota kelas statis. Untuk informasi selengkapnya, lihat Konstruktor Statik.

Spesifikasi Bahasa C#

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

Lihat juga