Oluşturucular Kullanma (C# Programlama Kılavuzu)

Bir sınıf veya yapı örneği başlatıldığında, oluşturucu çağrılır. Oluşturucular sınıf veya yapıyla aynı ada sahiptir ve genellikle yeni nesnenin veri üyelerini başlatır.

Aşağıdaki örnekte, adlı Taxi bir sınıf basit bir oluşturucu kullanılarak tanımlanır. Bu sınıf daha sonra yeni işleç ile örneği oluşturulur. Oluşturucu Taxi , yeni nesne için bellek ayrıldıktan hemen sonra işleç tarafından new çağrılır.

public class Taxi
{
    public bool IsInitialized;

    public Taxi()
    {
        IsInitialized = true;
    }
}

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

Parametre içermeyen bir oluşturucuya parametresiz oluşturucu adı verilir. parametresiz oluşturucular, işleci kullanılarak new bir nesnenin örneği her başlatıldığında çağrılır ve öğesine newbağımsız değişken sağlanmaz. C# 12 birincil oluşturucuları tanıtır. Birincil oluşturucu, yeni bir nesne başlatmak için sağlanması gereken parametreleri belirtir. Daha fazla bilgi için bkz . Örnek Oluşturucuları.

Sınıf statik olmadığı sürece, oluşturucuları olmayan sınıflara sınıf örneği oluşturmayı etkinleştirmek için C# derleyicisi tarafından genel parametresiz bir oluşturucu verilir. Daha fazla bilgi için bkz . Statik Sınıflar ve Statik Sınıf Üyeleri.

Oluşturucuyu aşağıdaki gibi özel hale getirerek bir sınıfın örneğini oluşturmasını engelleyebilirsiniz:

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

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

Daha fazla bilgi için bkz . Özel Oluşturucular.

Yapı türleri için oluşturucular sınıf oluşturucularına benzer. ile bir yapı türü örneği oluşturulduğunda newbir oluşturucu çağrılır. değeri struct olarak default ayarlandığında, çalışma zamanı yapıdaki tüm belleği 0 olarak başlatır. C# 10'un öncesinde, structs derleyici tarafından otomatik olarak sağlandığından, açık bir parametresiz oluşturucu içeremez. Daha fazla bilgi için Yapı türleri makalesinin Yapı başlatma ve varsayılan değerler bölümüne bakın.

Aşağıdaki kod, tamsayının başlatıldığından emin olmanız için parametresiz Int32oluşturucuyu kullanır:

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

Ancak aşağıdaki kod, kullanmadığından ve başlatılmamış bir nesneyi kullanmaya çalıştığından derleyici hatasına newneden olur:

int i;
Console.WriteLine(i);

Alternatif olarak, temel alınan structs nesneler (tüm yerleşik sayısal türler dahil) başlatılabilir veya atanabilir ve ardından aşağıdaki örnekte olduğu gibi kullanılabilir:

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

Hem sınıflar hem de yapılar, birincil oluşturucular da dahil olmak üzere parametreleri alacak oluşturucuları tanımlayabilir. Parametre kullanan oluşturucular bir new deyim veya temel deyim aracılığıyla çağrılmalıdır. Sınıflar ve yapılar da birden çok oluşturucu tanımlayabilir ve parametresiz oluşturucu tanımlamak için gerekli değildir. Örneğin:

public class Employee
{
    public int Salary;

    public Employee() { }

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

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

Bu sınıf, aşağıdaki deyimlerden biri kullanılarak oluşturulabilir:

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

Oluşturucu, temel sınıfın base oluşturucusunu çağırmak için anahtar sözcüğünü kullanabilir. Örneğin:

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

Bu örnekte, oluşturucu bloğu yürütülmeden önce temel sınıfın oluşturucu çağrılır. anahtar base sözcüğü parametrelerle veya parametreler olmadan kullanılabilir. Oluşturucuya yönelik tüm parametreler, parametresi olarak baseveya bir ifadenin parçası olarak kullanılabilir. Daha fazla bilgi için bkz . base.

Türetilmiş bir sınıfta, temel sınıf oluşturucu anahtar sözcüğü kullanılarak base açıkça çağrılmazsa, varsa parametresiz oluşturucu örtük olarak çağrılır. Aşağıdaki oluşturucu bildirimleri etkili bir şekilde aynıdır:

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

Temel sınıf parametresiz oluşturucu sunmuyorsa, türetilen sınıf kullanarak basebir temel oluşturucuya açık bir çağrı yapmalıdır.

Oluşturucu, bu anahtar sözcüğü kullanarak aynı nesnedeki başka bir oluşturucuyu çağırabilir. gibi base, this parametresiz veya parametresiz olarak kullanılabilir ve oluşturucudaki tüm parametreler parametresi olarak thisveya bir ifadenin parçası olarak kullanılabilir. Örneğin, önceki örnekteki ikinci oluşturucu kullanılarak thisyeniden yazılabilir:

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

Önceki örnekte anahtar sözcüğün this kullanılması, bu oluşturucunun çağrılmalarına neden olur:

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

Oluşturucular genel, özel, korumalı, , korumalı iç veya özel korumalı olarak işaretlenebilir. Bu erişim değiştiricileri, sınıfın kullanıcılarının sınıfı nasıl üretebileceğini tanımlar. Daha fazla bilgi için bkz . Erişim Değiştiricileri.

Oluşturucu statik anahtar sözcüğü kullanılarak statik olarak bildirilebilir. Statik oluşturucular, statik alanlara erişilmeden hemen önce otomatik olarak çağrılır ve statik sınıf üyelerini başlatmak için kullanılır. Daha fazla bilgi için bkz . Statik Oluşturucular.

C# Dil Belirtimi

Daha fazla bilgi için bkz. C# Dil Belirtiminde Örnek oluşturucuları ve Statik oluşturucular. Dil belirtimi, C# sözdizimi ve kullanımı için kesin bir kaynaktır.

Ayrıca bkz.