'base' Anahtar Kelimesi
Coddy'nin C# Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası — ders 20 / 70.
Türetilmiş bir sınıf bir temel sınıftan miras aldığında, genellikle üst sınıfın üyelerine doğrudan erişmeniz gerekir. base anahtar kelimesi bu bağlantıyı sağlayarak temel sınıf yapıcısını çağırmanıza veya yöntemlerine ve özelliklerine erişmenize olanak tanır.
base anahtar kelimesinin en yaygın kullanımı, üst sınıfın yapıcı metodunu (constructor) çağırmaktır. Türetilmiş bir nesne oluştururken, değerleri temel sınıfa aktarabilirsiniz:
public class Animal
{
public string Name { get; set; }
public Animal(string name)
{
Name = name;
}
}
public class Dog : Animal
{
public string Breed { get; set; }
public Dog(string name, string breed) : base(name)
{
Breed = breed;
}
}: base(name) söz dizimi, Dog yapıcı metot gövdesi çalışmadan önce Animal yapıcı metodunu çağırır. Bu, temel sınıfın önce düzgün bir şekilde başlatılmasını sağlar.
Türetilmiş sınıf içinden üst sınıf yöntemlerini çağırmak için base ifadesini de kullanabilirsiniz:
public class Animal
{
public void Speak()
{
Console.WriteLine("Animal sound");
}
}
public class Dog : Animal
{
public void Speak()
{
base.Speak(); // Animal'ın Speak metodunu çağırır
Console.WriteLine("Woof!");
}
}Burada, base.Speak() metodun üst sınıftaki sürümünü açıkça çağırır. Bu, üst sınıfın davranışını tamamen değiştirmek yerine genişletmek istediğinizde yararlıdır.
Görev
KolayTüretilmiş sınıfların, üst sınıflarını düzgün bir şekilde başlatmak ve devralınan davranışı genişletmek için base anahtar kelimesini nasıl kullandığını gösteren bir ürün envanter sistemi oluşturalım.
Kodunuzu düzenlemek için üç dosya oluşturacaksınız:
Product.cs:Inventoryad alanında (namespace) birProductsınıfı tanımlayın. Bu temel sınıf, birNameözelliğine (string) vePriceözelliğine (decimal) sahip herhangi bir ürünü temsil eder. Her iki değeri de kabul eden bir yapıcı (constructor) ve"{Name}: ${Price}"döndüren birGetInfo()metodu ekleyin.ElectronicProduct.cs:Inventoryad alanındaProductsınıfından miras alan birElectronicProductsınıfı tanımlayın. Bu sınıf birWarrantyMonthsözelliği (int) ekler. Yapıcı; ad, fiyat ve garanti süresini kabul etmelidir - adı ve fiyatı üst sınıf yapıcısına iletmek içinbasekullanın. Öncebasekullanarak üst sınıfınGetInfo()metodunu çağıran, ardından çıktıyı genişletmek için sonuna" (Warranty: {WarrantyMonths} months)"ekleyen birGetInfo()metodu oluşturun.Program.cs: Ana dosyanızda, giriş değerlerini kullanarak birElectronicProductoluşturun veGetInfo()metodunu çağırarak tam bilgilerini görüntüleyin.
Üç giriş alacaksınız:
- Ürün adı
- Fiyat
- Garanti süresi (ay)
Elektronik ürününüz üzerinde GetInfo() metodunu çağırmanın sonucunu yazdırın.
Örneğin, girişler Laptop, 999.99 ve 24 ise çıktı şu şekilde olmalıdır:
Laptop: $999.99 (Warranty: 24 months)Türetilmiş sınıfın, mantığı tekrarlamak yerine temel sınıfın çıktısı üzerine nasıl inşa edildiğine dikkat edin. base anahtar kelimesi, üst sınıfın davranışını sorunsuz bir şekilde yeniden kullanmanıza ve genişletmenize olanak tanır!
Kopya kağıdı
base anahtar kelimesi, türetilmiş bir sınıfın üst sınıfının üyelerine erişmesine olanak tanır.
Üst sınıfın yapıcı metodunu çağırmak için base kullanın:
public class Animal
{
public string Name { get; set; }
public Animal(string name)
{
Name = name;
}
}
public class Dog : Animal
{
public string Breed { get; set; }
public Dog(string name, string breed) : base(name)
{
Breed = breed;
}
}: base(name) sözdizimi, türetilmiş sınıfın yapıcı metot gövdesi çalışmadan önce üst sınıfın yapıcı metodunu çağırarak düzgün bir başlatma sağlar.
Türetilmiş sınıftan üst sınıf metotlarını çağırmak için base kullanın:
public class Animal
{
public void Speak()
{
Console.WriteLine("Animal sound");
}
}
public class Dog : Animal
{
public void Speak()
{
base.Speak(); // Animal'ın Speak metodunu çağırır
Console.WriteLine("Woof!");
}
}Bu, üst sınıf davranışını tamamen değiştirmek yerine onu genişletmenize olanak tanır.
Kendin dene
using System;
using Inventory;
class Program
{
public static void Main(string[] args)
{
// Girdileri oku
string name = Console.ReadLine();
decimal price = Convert.ToDecimal(Console.ReadLine());
int warrantyMonths = Convert.ToInt32(Console.ReadLine());
// TODO: Girdi değerleri ile bir ElectronicProduct oluşturun
// TODO: Elektronik ürününüz üzerinde GetInfo() çağırmanın sonucunu yazdırın
}
}
Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.
Nesne Yönelimli Programlama bölümündeki tüm dersler
1OOP Temelleri
Harici Dosyalarİsim Alanları ve YönergelerSınıf ve Nesnelere Giriş'this' Anahtar KelimesiMetotlar ve ParametrelerAlanlar ve ÖzelliklerYapıcı MetotlarNesne BaşlatıcılarÖzet - Basit Hesap Makinesi4Kalıtım
Temel Kalıtım (:) Sözdizimi'base' Anahtar KelimesiVirtual ve Override Anahtar KelimeleriSealed Sınıflar'object' Temel SınıfıÖzet - Çalışan Hiyerarşisi7İleri Düzey Özellikler
Operatör Aşırı Yüklemeİndeksleyiciler (this[])ToString() Geçersiz KılmaGenişletme MetotlarıÖzet - Özel Liste10Tasarım Kalıpları Bölüm 1
Tasarım Kalıplarına GirişThread-Safe SingletonFactory KalıbıObserver Kalıbı (Olaylar)Strategy Kalıbı2Özellikler ve Statik Üyeler
Otomatik Uygulanan ÖzelliklerSadece Okunur/Yazılır ÖzelliklerStatik Alanlar ve MetotlarStatik Sınıflarİfade Gövdeli Üyeler5Polimorfizm ve Arayüzler
Derleme vs Çalışma Zamanı PolimorfizmiArayüz vs Soyut SınıfÇoklu ArayüzlerBelirgin ArayüzlerUpcasting ve DowncastingÖzet - Şekil Hesaplayıcı8İleri Düzey OOP Kavramları
Kalıtım yerine KompozisyonGenerics (Sınıflar ve Metotlar)Delegates ve EventlerAttributes ve ReflectionIDisposable ve using İfadesiDependency Injection Temelleri11Tasarım Kalıpları Bölüm 2
Komut KalıbıAdaptör KalıbıDekoratör KalıbıŞablon Metot KalıbıDurum KalıbıKompozit Kalıbı3Sınıf Mimarisi
Örnek vs Statik Veri'readonly' ve 'const' Anahtar KelimeleriDestekleyici Alanlar (Backing Fields)Özet - Banka Hesabı Yöneticisi6Kapsülleme
Erişim BelirleyicilerKapsülleme için ÖzelliklerVeri Gizleme UygulamasıDeğişmezlik KalıplarıÖzet - Öğrenci Kayıtları