İsteğe Bağlı Parametreler
Coddy'nin C# Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası. Ders 48 / 70.
İsteğe bağlı parametreler, metot parametreleri için varsayılan değerler tanımlamanıza olanak tanır. Bir çağıran o parametre için bir değer sağlamadığında, varsayılan değer otomatik olarak kullanılır.
Metot imzasında varsayılan bir değer atayarak isteğe bağlı bir parametre oluşturursunuz:
public static void Greet(string name, string greeting = "Hello")
{
Console.WriteLine(greeting + ", " + name + "!");
}
// Her iki çağrı da çalışır
Greet("Alice"); // Hello, Alice!
Greet("Bob", "Welcome"); // Welcome, Bob!İsteğe bağlı parametreler, tüm zorunlu parametrelerden sonra gelmelidir. Birden fazla isteğe bağlı parametreye sahip olabilirsiniz ve çağıranlar sağ taraftakilerden herhangi birini atlayabilir:
public static void CreateUser(string name, int age = 0, bool isActive = true)
{
Console.WriteLine($"{name}, Age: {age}, Active: {isActive}");
}
CreateUser("Emma"); // Emma, Yaş: 0, Aktif: True
CreateUser("James", 25); // James, Yaş: 25, Aktif: True
CreateUser("Sarah", 30, false); // Sarah, Yaş: 30, Aktif: FalseVarsayılan değerler derleme zamanı sabitleri olmalıdır - sabit değerler (literaller), const değerleri veya default ifadeleri. Değişkenleri veya metot çağrılarını varsayılan olarak kullanamazsınız. Bu durum, isteğe bağlı parametreleri yapılandırma ayarları ve çoğu çağıranın ortak değerler kullandığı metotlar için ideal hale getirir.
Görev
KolayEsnek mesaj biçimlendirmesi sağlamak için isteğe bağlı parametreler kullanan bir bildirim sistemi oluşturalım. Çoğu çağıranın makul varsayılanları kullanacağı, özelleştirilebilir ayarlarla bildirim gönderebilen bir yardımcı sınıf oluşturacaksın.
Kodunu iki dosya arasında düzenleyeceksin:
NotificationService.cs:NotificationServicead alanında, isteğe bağlı parametreleri gösteren bir yönteme sahip birNotificationssınıfı oluştur:SendNotification(string message, string priority = "Normal", bool addTimestamp = true)- Bu yöntem, biçimlendirilmiş bir bildirim dizesi döndürmelidir.addTimestamptrue olduğunda, mesajın başına[TIMESTAMP]ekle. Biçim, zaman damgası ayarına bağlı olarak[Priority] Messageveya[TIMESTAMP] [Priority] Messageolmalıdır.
Program.cs: Ana dosyanda,SendNotificationyöntemini üç farklı şekilde çağırarak isteğe bağlı parametrelerin nasıl çalıştığını göster — tüm varsayılanları kullanarak, bir parametreyi değiştirerek ve her iki isteğe bağlı parametreyi değiştirerek.
Üç girdi alacaksın:
- İlk mesaj (tüm varsayılan değerleri kullanacak)
- İkinci mesaj (varsayılan zaman damgasıyla birlikte
"Urgent"önceliğini kullanacak) - Üçüncü mesaj (
"Low"önceliğini ve zaman damgası olmamasını kullanacak)
SendNotification yöntemini üç kez çağır ve her sonucu yazdır:
- İlk çağrı: yalnızca ilk mesajı ilet (varsayılanları kullanır:
"Normal"önceliği, zaman damgası etkin) - İkinci çağrı: ikinci mesajı
"Urgent"önceliğiyle ilet (zaman damgası hâlâ varsayılan olarak true değerindedir) - Üçüncü çağrı: üçüncü mesajı
"Low"önceliğiyle ve zaman damgası içinfalsedeğeriyle ilet
Örneğin girdiler System started, Server overload ve Cache cleared ise çıktı şu şekilde olmalıdır:
[TIMESTAMP] [Normal] System started
[TIMESTAMP] [Urgent] Server overload
[Low] Cache clearedAynı yöntemin üç senaryoyu da ne kadar zarif bir şekilde ele aldığına dikkat et — çağıranlar yalnızca varsayılanlardan değiştirmek istediklerini belirtir!
Kendin dene
using System;
using Notifications;
class Program
{
public static void Main(string[] args)
{
// Üç mesajı oku
string message1 = Console.ReadLine();
string message2 = Console.ReadLine();
string message3 = Console.ReadLine();
// NotificationService örneği oluştur
NotificationService service = new NotificationService();
// TODO: SendNotification metodunu üç kez çağır ve her sonucu yazdır:
// 1. İlk çağrı: sadece message1 değerini geçir (tüm varsayılanları kullanır)
// 2. İkinci çağrı: message2 değerini "Urgent" önceliğiyle geçir (timestamp varsayılan olarak true olur)
// 3. Üçüncü çağrı: message3 değerini "Low" önceliğiyle ve timestamp için false değeriyle geçir
}
}
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ı9Değişken Argümanlar
'params' Anahtar Kelimesiİsteğe Bağlı Parametrelerİsimlendirilmiş ArgümanlarMetot Aşırı YüklemeKendi başına pratik yap: Online C# derleyicisi