C#’ta Base Constructor
‘ı Doğru Şekilde Çağırma
C#’ta nesneye dayalı programlama çalışırken, özellikle miras alırken, genellikle türetilmiş bir sınıftan temel sınıfa veri geçirme ihtiyacıyla karşılaşırsınız. Bu, temel sınıfta tanımlanan özelliklerin ve davranışların düzgün bir şekilde başlatılmasını sağlamak için çok önemlidir. Bu blog yazısında, Exception
gibi bir sınıftan miras alırken base constructor
‘ı etkin bir şekilde nasıl çağıracağımıza odaklanacağız.
Problem
Diyelim ki C#’ta yerleşik Exception
sınıfından miras alan özel bir istisna sınıfı oluşturuyorsunuz. Amacınız Exception
sınıfının yapıcısına ek bilgi (örneğin bir mesaj) iletmek. Ancak, birçok geliştirici bunu yapmaya çalışırken zorluklar yaşayabiliyor. Örneğin, çabanız şu şekilde olabilir:
class MyExceptionClass : Exception
{
public MyExceptionClass(string message, string extraInfo)
{
//Her şeyin bozulduğu yer burası
base(message);
}
}
Bu kod parçasında neden hata aldığınızı anlamakta zorlanabilirsiniz. Bunun nedeni, temel yapıcıları yanlış bir şekilde çağırma yöntemidir. Haydi bunu inceleyelim ve doğru yaklaşımı anlayalım.
Çözüm
C#’ta temel sınıf yapıcısına parametreleri doğru bir şekilde geçirebilmek için, türetilmiş sınıf yapıcısının başlatıcı listesinde bunu doğrudan yapmanızı sağlayan belirli bir sözdizimi kullanmalısınız. İşte orijinal uygulamanızı düzeltmenin yolu:
Doğru Sözdizimi
İşte sınıfınızın değiştirilmiş hali:
public class MyExceptionClass : Exception
{
public MyExceptionClass(string message, string extraInfo) : base(message)
{
//diğer işlemler burada
}
}
Önemli Değişikliklerin Açıklaması
-
Yapıcı Başlatma Listesini Kullanma: Artık yapıcı parametrelerinden hemen sonra
: base(message)
ifadesini eklediğimizi fark edin. Bu, C#‘a temel sınıf (Exception
) yapıcısını çağırmasını vemessage
argümanını iletmesini söyler. -
Yapıcı Çağrı Sınırlarını Anlama: C#’ta bir yapıcı standart bir yöntem değildir ve yapıcı gövdesi başladıktan sonra normal bir yöntem gibi çağrılamaz. Bu nedenle,
base(message)
kullanımının bir yöntem gövdesi içinde çalışmamasının sebebi budur. -
Ek Parametreler: Eğer ek parametre olan
extraInfo
‘yu kullanmak istiyorsanız, yapıcıyı genişletebilir ve belki de bunu özel istisna sınıfınızda daha sonraki kullanımlar için depolayabilirsiniz.
Her İki Parametreyi Kullanma Örneği
Eğer extraInfo
için ek bir mantık eklemeye karar verirseniz, sınıfınız şu şekilde görünebilir:
public class MyExceptionClass : Exception
{
public string ExtraInfo { get; private set; }
public MyExceptionClass(string message, string extraInfo) : base(message)
{
ExtraInfo = extraInfo; // Ek bilgiyi daha sonra referans için sakla
}
}
Sonuç
Temel sınıf yapıcısını çağırmak için doğru sözdizimini takip ederek, C# sınıf hiyerarşilerinizin düzgün bir şekilde kurulmasını sağlayabilirsiniz. Bu, özellikle istisnalarla çalışırken önemlidir, çünkü hata işleme rutinlerinizde netlik ve işlevsellik sağlamaya yardımcı olur. Unutmayın, her zaman parametreleri temel yapıcılara iletmek için başlatıcı listesini kullanın!
C# mirası ve yapıcıları hakkında daha fazla okumak ve keşfetmek için, resmi Microsoft belgelerine veya diğer programlama kaynaklarına göz atabilirsiniz.