'params' Anahtar Kelimesi
Coddy'nin C# Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası — ders 47 / 70.
params anahtar kelimesi, bir metodun aynı türden değişken sayıda argüman kabul etmesini sağlar. Çağıranların manuel olarak bir dizi oluşturmasını gerektirmek yerine, argümanları virgülle ayırarak doğrudan geçirebilirler.
Metot imzasında bir dizi parametresinden önce params anahtar kelimesini yerleştirin:
public static int Sum(params int[] numbers)
{
int total = 0;
foreach (int n in numbers)
total += n;
return total;
}
// Bu çağrıların tümü çalışır
Console.WriteLine(Sum(1, 2)); // 3
Console.WriteLine(Sum(1, 2, 3, 4, 5)); // 15
Console.WriteLine(Sum()); // 0 (boş dizi)Derleyici, argümanları otomatik olarak bir diziye sarar. Eğer halihazırda bir diziniz varsa, mevcut bir diziyi doğrudan da geçirebilirsiniz:
int[] values = { 10, 20, 30 };
Console.WriteLine(Sum(values)); // 60Hatırlanması gereken birkaç kural vardır: bir metodun yalnızca bir tane params parametresi olabilir ve bu, listedeki son parametre olmalıdır. Bunu normal parametrelerle birleştirebilirsiniz:
public static void Log(string prefix, params object[] items)
{
foreach (var item in items)
Console.WriteLine(prefix + item);
}
Log("Item: ", "Apple", 42, true);params anahtar kelimesi, API'leri daha esnek ve kullanıcı dostu hale getirir; bu nedenle Console.WriteLine ve string.Format gibi metotlarda bu anahtar kelimeyle karşılaşırsınız.
Görev
KolayHerhangi bir sayıda değeri işlemek için params anahtar kelimesini kullanan esnek bir mesaj biçimlendirici oluşturalım. Değişken argümanlarla mesajları biçimlendirebilen bir yardımcı sınıf oluşturacak ve params kullanımının metotları nasıl daha çok yönlü ve kullanıcı dostu hale getirdiğini göstereceksiniz.
Kodunuzu iki dosya halinde düzenleyeceksiniz:
MessageFormatter.cs:Formattingad alanı (namespace) içinde,paramskullanan iki metoda sahip birMessageFormattersınıfı oluşturun:Combine(params string[] parts)- sağlanan tüm dizeleri aralarında bir boşluk olacak şekilde birleştirir ve sonucu döndürürFormatList(string label, params int[] numbers)- normal bir parametreyi birparamsdizisiyle birleştirir. Etiketi, ardından bir iki nokta üst üste ve virgülle ayrılmış tüm sayıları döndürmelidir (örneğin,Scores: 85, 90, 78)
Program.cs: Ana dosyanızda, her iki metodu da girdilerle gösterin. Bir etiket dizesi okuyun, ardından virgülle ayrılmış tam sayılardan oluşan bir satır okuyun. Üç sabit kelimeyi birleştirmek içinCombinemetodunu kullanın ve etiketi sayılarla birlikte görüntülemek içinFormatListmetodunu kullanın.
İki girdi alacaksınız:
- Bir etiket dizesi (örneğin,
Scores) - Virgülle ayrılmış tam sayı listesi (örneğin,
85,90,78,92)
Önce, "Hello", "params" ve "world!" kelimeleriyle Combine metodunu çağırın ve sonucu yazdırın. Ardından virgülle ayrılmış tam sayıları bir diziye ayrıştırın ve etiket ile tam sayı dizisini kullanarak FormatList metodunu çağırın, bu sonucu da yazdırın.
Örneğin, girdiler Scores ve 85,90,78 ise, çıktı şöyle olmalıdır:
Hello params world!
Scores: 85, 90, 78Combine metodunun herhangi bir sayıda dizeyi doğrudan nasıl kabul ettiğine, FormatList metodunun ise normal parametreleri params ile nasıl karıştırabileceğinizi gösterdiğine dikkat edin - params parametresinin sadece en sonda gelmesi gerekir. Ayrıca mevcut bir diziyi de bir params metoduna geçirebilirsiniz; ayrıştırılmış tam sayılarla tam olarak bunu yapacaksınız!
Kopya kağıdı
params anahtar kelimesi, çağıranların manuel olarak bir dizi oluşturmasına gerek kalmadan bir metodun aynı türden değişken sayıda bağımsız değişken kabul etmesine olanak tanır:
public static int Sum(params int[] numbers)
{
int total = 0;
foreach (int n in numbers)
total += n;
return total;
}
// Bu çağrıların tümü çalışır
Console.WriteLine(Sum(1, 2)); // 3
Console.WriteLine(Sum(1, 2, 3, 4, 5)); // 15
Console.WriteLine(Sum()); // 0 (boş dizi)Mevcut bir diziyi doğrudan bir params metoduna geçirebilirsiniz:
int[] values = { 10, 20, 30 };
Console.WriteLine(Sum(values)); // 60params için kurallar:
- Bir metodun yalnızca bir tane
paramsparametresi olabilir - Listedeki son parametre olmalıdır
- Normal parametrelerle birleştirilebilir
public static void Log(string prefix, params object[] items)
{
foreach (var item in items)
Console.WriteLine(prefix + item);
}
Log("Item: ", "Apple", 42, true);Kendin dene
using System;
using Formatting;
class Program
{
public static void Main(string[] args)
{
// Girdileri oku
string label = Console.ReadLine();
string numbersInput = Console.ReadLine();
// TODO: MessageFormatter.Combine metodunu "Hello", "params" ve "world!" ile kullanın
// ve sonucu yazdırın
// TODO: Virgülle ayrılmış tam sayıları bir int dizisine ayrıştırın
// İpucu: Dizeyi bölün ve her parçayı int türüne dönüştürün
// TODO: MessageFormatter.FormatList metodunu label ve int dizisi ile kullanın
// ve sonucu 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ı9Değişken Argümanlar
'params' Anahtar Kelimesiİsteğe Bağlı Parametrelerİsimlendirilmiş ArgümanlarMetot Aşırı Yükleme