Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
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,new
işleci kullanılarak bir nesne örneği oluşturulduğunda ve new
iç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.
new
ile bir yapı türü örneği oluşturulduğunda çalışma zamanı bir oluşturucu çağırır. Bir struct
default
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, new
kullanmadığı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,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, base
iç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 base
kullanarak 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.
base
gibi, this
parametrelerle veya parametreler olmadan kullanılabilir ve oluşturucudaki tüm parametreler this
parametresi olarak veya bir ifadenin parçası olarak kullanılabilir. Örneğin, önceki örnekteki ikinci oluşturucu this
kullanı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 protected
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, 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.