'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 sayıda değeri işlemek için params anahtar sözcüğünü kullanan esnek bir mesaj biçimlendirici oluşturalım. Değişken sayıda bağımsız değişkenle mesajları biçimlendirebilen bir yardımcı sınıf oluşturacak ve params anahtar sözcüğünün metotları nasıl daha çok yönlü ve çağıran açısından daha kullanışlı hâle getirdiğini göstereceksin.
Kodunu iki dosya arasında düzenleyeceksin:
MessageFormatter.cs:MessageFormatterad alanında,Formattingkullanan iki metoda sahip birparamssınıfı oluştur: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 iki nokta üst üste işaretini ve sonra virgüllerle ayrılmış tüm sayıları döndürmelidir (ör.Scores: 85, 90, 78)
Program.cs: Ana dosyanda her iki metodu girdilerle göster. Bir etiket dizesi oku, ardından virgülle ayrılmış tam sayılardan oluşan bir satır oku. Üç sabit kelimeyi birleştirmek içinCombinemetodunu, etiketi sayılarla birlikte görüntülemek içinFormatListmetodunu kullan.
İki girdi alacaksın:
- Bir etiket dizesi (ör.
Scores) - Virgülle ayrılmış bir tam sayı listesi (ör.
85,90,78,92)
İlk olarak Combine metodunu "Hello", "params" ve "world!" kelimeleriyle çağır ve sonucu yazdır. Ardından virgülle ayrılmış tam sayıları bir diziye ayrıştır ve FormatList metodunu etiket ve tam sayı dizisiyle çağırarak bu sonucu da yazdır.
Örneğin girdiler Scores ve 85,90,78 ise çıktı şu şekilde olmalıdır:
Hello params world!
Scores: 85, 90, 78Combine metodunun doğrudan herhangi bir sayıda dize kabul ettiğine, FormatList metodunun ise normal parametreleri params ile karıştırabileceğini gösterdiğine dikkat et - params parametresinin yalnızca son sırada olması gerekir. Ayrıca mevcut bir diziyi params metoduna geçirebilirsin; ayrıştırılmış tam sayılarla yapacağın şey de tam olarak budur!
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üklemeKendi başına pratik yap: Online C# derleyicisi