Aracılığıyla paylaş


Oluşturucular (C# programlama kılavuzu)

oluşturucu, bir sınıfı örneği veya yapısı oluşturulduğunda çalışma zamanı tarafından çağrılan bir yöntemdir. Bir sınıf veya yapı, farklı bağımsız değişkenlere sahip birden çok oluşturucuya sahip olabilir. Oluşturucular, tür örneklerinin oluşturulduğunda geçerli olduğundan emin olmanıza olanak tanır. Daha fazla bilgi ve örnek için bkz. Örnek Yapıcılar ve Yapıcıların Kullanımı.

Yeni bir örneği başlatmanın bir parçası olan birkaç eylem vardır. Aşağıdaki eylemler aşağıdaki sırayla gerçekleştirilir:

  1. Örneğin alanları 0 olarak ayarlanır. Bu başlatma genellikle çalışma zamanı tarafından yapılır.
  2. Alan başlatıcılarıçalıştırır. En türetilmiş türdeki alan başlatıcıları çalışır.
  3. Temel tür alan başlatıcılarıçalıştırır. Doğrudan taban ile başlayarak her taban türü üzerinden System.Object'ye kadar alan başlatıcıları.
  4. Temel örnek oluşturucularıçalıştırır. Object.Object ile başlayan herhangi bir örnek oluşturucu, her temel sınıftan geçerek doğrudan temel sınıfa gider.
  5. Örnek oluşturucuçalıştırır. Türü için örnek oluşturucu çalışır.
  6. Nesne başlatıcılarıçalıştırır. İfade herhangi bir nesne başlatıcı içeriyorsa, örnek oluşturucu çalıştırıldıktan sonra çalışır. Nesne başlatıcılar metin sırasına göre çalışır.

Yukarıdaki eylemler, new işlecikullanılarak bir örnek oluşturulduğunda gerçekleşir. struct örneği yeni default değerine ayarlandığında, tüm örnek alanları sıfır olarak ayarlanır. Dizi öğeleri, bir dizi oluşturulduğunda varsayılan 0 veya null değerine ayarlanır.

statik oluşturucuvarsa, türün herhangi bir örneği için hiçbir örnek oluşturma işlemi gerçekleşmeden önce çalışır. Statik oluşturucu en fazla bir kez çalışır.

C# 14'le başlayarak, örnek oluşturucularını kısmi üye olarak bildirebilirsiniz. Kısmi oluşturucuların hem bildirim hem de uygulama beyanı olmalıdır.

Oluşturucu söz dizimi

Oluşturucu, türüyle aynı ada sahip bir yöntemdir. Yöntem imzası,isteğe bağlı bir erişim değiştiricisi, yöntem adı ve parametre listesini içerebilir; dönüş türü içermez. Aşağıdaki örnek, Personadlı bir sınıfın oluşturucusunu gösterir.

public class Person
{
   private string last;
   private string first;

   public Person(string lastName, string firstName)
   {
      last = lastName;
      first = firstName;
   }

   // Remaining implementation of Person class.
}

Bir oluşturucu tek bir deyim olarak uygulanabiliyorsa, bir ifade gövdesi üyesi kullanabilirsiniz. Aşağıdaki örnek, oluşturucusunun tek dize parametresi Locationolan bir name sınıfı tanımlar. İfade gövdesi tanımı, argümanı locationName alanına atar.

public class Location
{
   private string locationName;

   public Location(string name) => Name = name;

   public string Name
   {
      get => locationName;
      set => locationName = value;
   }
}

Bir tür örnek oluşturmak için bir parametre gerektiriyorsa, aşağıdaki örnekte gösterildiği gibi, türün örneğini oluşturmak için bir veya daha fazla parametrenin gerekli olduğunu belirtmek için birincil oluşturucu kullanabilirsiniz:

public class LabelledContainer<T>(string label)
{
   public string Label { get; } = label;
   public required T Contents 
   { 
      get;
      init;
   }
}

Bir tür için birincil oluşturucu partial bildirebilirsiniz. Yalnızca bir birincil oluşturucu bildirimine izin verilir. Başka bir deyişle, türün partial yalnızca bir bildirimi birincil oluşturucunun parametrelerini içerebilir.

Statik oluşturucular

Önceki örneklerde yeni bir nesne başlatan örnek oluşturucuları gösterilmektedir. Bir sınıf veya yapı, türün statik üyelerini başlatan bir statik oluşturucu da bildirebilir. Statik oluşturucular parametresizdir. Statik alanları başlatmak için statik bir oluşturucu sağlamazsanız, C# derleyicisi, Varsayılan C# türleri değerleri makalesinde listelendiği gibi statik alanları varsayılan değerlerine başlatır.

Aşağıdaki örnek, statik bir alan başlatmak için statik bir oluşturucu kullanır.

public class Adult : Person
{
   private static int minimumAge;

   public Adult(string lastName, string firstName) : base(lastName, firstName)
   { }

   static Adult() => minimumAge = 18;

   // Remaining implementation of Adult class.
}

Aşağıdaki örnekte gösterildiği gibi ifade gövdesi tanımına sahip bir statik oluşturucu da tanımlayabilirsiniz.

public class Child : Person
{
   private static int maximumAge;

   public Child(string lastName, string firstName) : base(lastName, firstName)
   { }

   static Child() => maximumAge = 18;

   // Remaining implementation of Child class.
}

Daha fazla bilgi ve örnek için bkz. Statik Oluşturucular.

Kısmi oluşturucular

C# 14'le başlayarak, kısmi bir sınıfta veya yapıda kısmi oluşturucular bildirebilirsiniz. Kısmi oluşturucuların tanımlayıcı bir bildirimi ve uygulayan bildirimi olmalıdır. Kısmi oluşturucuları bildirme ve uygulama imzaları , kısmi üyelerin kurallarına göre eşleşmelidir. Kısmi oluşturucunun tanımlayıcı bildirimi : base() veya : this() oluşturucu başlatıcısını kullanamaz. Herhangi bir kurucu başlatıcı, uygulama bildiriminde eklenmelidir.

Ayrıca bkz.