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 new
bağı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 new
bir 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 new
neden 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 base
veya 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 base
bir 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 this
veya bir ifadenin parçası olarak kullanılabilir. Örneğin, önceki örnekteki ikinci oluşturucu kullanılarak this
yeniden 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ı, iç, 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.