Aracılığıyla paylaş


Oluşturucuları kullanma (C# programlama kılavuzu)

Bir sınıfı veya yapısı örneklendiğinde, çalışma zamanı constructor'ını çağırır. Oluşturucular, sınıf veya yapıyla aynı ada sahiptir ve genellikle yeni nesnenin veri üyelerini başlatmak için kullanılır.

Aşağıdaki örnekte, basit bir oluşturucu kullanılarak Taxi adlı bir sınıf tanımlanır. Daha sonra bu sınıf, new işleciyle örneklendirilir. Çalışma zamanı, yeni nesne için bellek ayrıldıktan hemen sonra Taxi oluşturucuyu çağırır.

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);
    }
}

Parametre içermeyen bir oluşturucu,parametresiz oluşturucu olarak adlandırılır. çalışma zamanı, new işleci kullanılarak bir nesne örneği oluşturulduğunda ve newiçin bağımsız değişken sağlanmadığında parametresiz oluşturucuyu çağırır. C# 12, birincil oluşturuculartanıttı. 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 statikdeğilse, sınıf örneği oluşturmayı etkinleştirmek için oluşturucuları olmayan sınıflara C# derleyicisi tarafından genel bir parametresiz 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. newile bir yapı türü örneği oluşturulduğunda çalışma zamanı bir oluşturucu çağırır. Bir structdefault değerine ayarlandığında, çalışma zamanı yapıdaki tüm belleği 0 olarak başlatır. struct türünde herhangi bir alan başlatıcı bildirirseniz, parametresiz bir oluşturucu sağlamanız gerekir. Daha fazla bilgi için Yapı türleri makalesinin Yapısı 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ı sağlamak için Int32için parametresiz yapıcıyı kullanır:

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

Ancak aşağıdaki kod, newkullanmadığından ve başlatılmamış bir nesne kullanmaya çalıştığından derleyici hatasına neden olur:

int i;
Console.WriteLine(i);

Alternatif olarak, bazı struct türleri (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. Parametreleri alacak oluşturucular bir new deyimi veya temel deyimi aracılığıyla çağrılmalıdır. Sınıflar ve yapılar birden fazla oluşturucu da tanımlayabilir ve parametresiz bir oluşturucu tanımlamak zorunlu 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 oluşturucusunu çağırmak için base 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. base anahtar sözcüğü parametrelerle veya parametreler olmadan kullanılabilir. Oluşturucuya yönelik tüm parametreler, baseiçin parametre olarak veya bir ifadenin parçası olarak kullanılabilir. Daha fazla bilgi için bkz. temel.

Türetilmiş bir sınıfta, temel sınıf oluşturucu base anahtar sözcüğü kullanılarak 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ın basekullanarak bir temel oluşturucuya açık bir çağrı yapması gerekir.

Oluşturucu, this anahtar sözcüğünü kullanarak aynı nesnede başka bir oluşturucu çağırabilir. basegibi, this parametrelerle veya parametreler olmadan kullanılabilir ve oluşturucudaki tüm parametreler thisparametresi olarak veya bir ifadenin parçası olarak kullanılabilir. Örneğin, önceki örnekteki ikinci oluşturucu thiskullanılarak yeniden yazılabilir:

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

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

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

Oluşturucular public, private, protected, dahili, korumalı dahili veya private protectedolarak 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, static anahtar sözcüğü kullanılarak statik olarak bildirilebilir. Statik oluşturucular, statik alanlara erişilmeden ö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 Örnek oluşturucuları ve Statik oluşturucuları bölümlerine C# Dil Belirtimiiçinde bakın. Dil belirtimi, C# söz dizimi ve kullanımı için kesin kaynaktır.

Ayrıca bkz.