Aşırı yükleme
Bir sınıfa ikisi de paint adını kullanan iki metot koyun. Bir başlık static void paint(string word). Diğeri static void paint(int n). Gövdeler kısadır: ilki word yazar, ikincisi n yazar. Main içinden paint("ok"); sonra paint(3); çağırın. Ekran iki satır göstermelidir: ilk satırda ok, ikincisinde 3. C# ikinci painti çakışma saymaz. İki başlığı farklı metotlar sayar çünkü parametre listeleri farklıdır. Farklı listelerle paylaşılan ad, bu sayfanın öğrettiği şeydir. Genel sınıf adını Pine tutun.
Aynı ad, farklı listeler
Şimdiye kadar her yeni fikir taze bir metot adı kullanıyordu: ring, greet, twice. Burada ad bilerek paint kalır. Değişen, parantezler arasında duran şeydir. Bir liste bir string tutar. Başka bir liste bir int tutar. Derleyici ikisini de tutar çünkü o listeler aynı değildir.
Pine dosyasını açın. Sınıf adı Pine kalır. Bu sayfa türü yeniden adlandırmaz. Hâlâ n * 2 döndüren bir twice demosu Main’de tuttuğunuz her şeyse onu silin. Artakalan her greeti silin. Her ReadLine satırını silin. Tutacağınız dosyada yazı bekleyişi yoktur.
Main dışında, hâlâ sınıfın süslü parantezlerinin içinde, her iki paint başlığını yazın. Bu sayfada void tutun: her gövde yazar ve return yoluyla Main’e bir şeyin dönmesi gerekmez. İlk gövde Console.WriteLine(word); kullanır. İkinci Console.WriteLine(n); kullanır. Çalıştırmadan önce dosyayı kaydedin. Tam ilk program sonraki kutudadır.
Tutacağınız dosya
Bu, ilk çalıştırdığınız sürümdür. Main iki çağrı tutar. Sınıf aynı adı paylaşan iki paint metodu tutar.
using System;
public class Pine
{
public static void Main()
{
paint("ok");
paint(3);
}
static void paint(string word)
{
Console.WriteLine(word);
}
static void paint(int n)
{
Console.WriteLine(n);
}
}
Yukarıdan okuyun. using System; kısa adları hazırlar. public class Pine türe ad verir. public static void Main() çalışma zamanının başladığı yerdir. İlk çağrı paint("ok")dır. Argüman bir string olduğu için C#, string word alan gövdeyi çalıştırır ve ok yazar. İkinci çağrı paint(3)tür. Argüman bir int olduğu için C#, int n alan gövdeyi çalıştırır ve 3 yazar. Ad paint her iki kez de aynıdır. Parantezlerin içindeki liste gövdeyi seçer. Ekranda iki satır: ok, sonra 3.
dotnet run ile çalıştırın. Program iki satır yazar ve durur. Yazmanızı beklemez. dotnet run bekliyorsa dosyada hâlâ ReadLine vardır. O satırı silin ve iki paint çağrısı ile yukarıdaki iki paint metodunu tutun. Ekran ok, sonra 3 gösterir. Her iki satır ok gösteriyorsa belki yalnız string metodunu bıraktınız ve her çağrı için sabit bir sözcük yazıyorsunuzdur. Her iki satır 3 gösteriyorsa belki yalnız int metodunu bıraktınız. Her iki başlığı tutun. Derleme paintin zaten tanımlı olduğunu bildirirse, her iki başlığın aynı listeye sahip olup olmadığını kontrol edin — örneğin paint(string word)in iki kopyası. Aşırı yükleme listede gerçek bir fark ister; yalnız parametre adı farklı olan ikinci bir aynı başlık kopyası yetmez. Yanlış satırlar gösteren bir ekran için .NET SDK’yı yeniden kurmayın.
İki sözcüklü ikinci bir liste
Parametre sayısı da farklı olabilir. İki string değeri alan ve bunları bir satırda boşlukla yazan üçüncü bir aşırı yükleme ekleyin. Üçünü birlikte pratik ederken ilk iki paint metodunu yerinde bırakın. Yalnızca bu şeklin odaklı demosu için yalnız bu listeyi tutan bir dosya kullanabilirsiniz.
using System;
public class Pine
{
public static void Main()
{
paint("hi", "sam");
}
static void paint(string a, string b)
{
Console.WriteLine(a + " " + b);
}
}
Bu ikinci dosyadır. Sayıyı bir liste farkı olarak öğretir. dotnet run çalıştırın. Ekran bir satır göstermelidir: hi sam. Çağrıda iki argüman vardır. Metotta iki parametre vardır. Bu eşleşme C#’ın bu gövdeyi seçmesi için yeterlidir. Aynı sınıfta hâlâ önceki paint(string word) ve paint(int n) varsa tutabilirsiniz. İki string değerli bir çağrı, tek argümanlı string metodunu seçmez çünkü sayılar farklıdır.
Pratik için üç aşırı yüklemeyi bir dosyaya koyduğunuzda Main her şekli kendi satırında çağırabilir. Tek stringli çağrı hâlâ paint(string word)e gider. Tek intli çağrı hâlâ paint(int n)e gider. İki string değerli çağrı paint(string a, string b)ye gider. Paylaşılan ad bu ayrımları silmez. hi sami gördükten sonra saklamak istediğiniz şekil iki çağrılıysa tutulan dosyayı geri koyun: paint("ok"); sonra paint(3);.
String listesinin yanında boş liste
Boş parantezli bir metot da farklı bir listedir. Parametresiz paint()i paint(string word) yanında tutabilirsiniz. Boş çağrı paint(); boş liste gövdesini çalıştırır. paint("go"); çağrısı string gövdesini çalıştırır.
using System;
public class Pine
{
public static void Main()
{
paint();
paint("go");
}
static void paint()
{
Console.WriteLine("ready");
}
static void paint(string word)
{
Console.WriteLine(word);
}
}
Bu üçüncü dosyadır. dotnet run çalıştırın. Ekran ilk satırda ready, ikinci satırda go göstermelidir. İlk çağrıda parantezler arasında hiçbir şey yoktur, bu yüzden paint() ile eşleşir. İkinci çağrı bir string gönderir, bu yüzden paint(string word) ile eşleşir. Bir metodu paintReady diye yeniden adlandırmak da derlenirdi, ama o başka bir beceridir. Bu sayfa ad painti tutar ve farkı listelerin taşımasına bırakır.
Hangi çağrı hangi başlığı çalıştırır
Çağrıları başlıkların yanında okuyun. Çağrıdaki argüman listesi başlıktaki parametre listesine uymalıdır. Bu başlangıç şeklinde hem tipler hem sayı önemlidir.
📊 call beside matching paint
| Call in Main | Header that runs | Screen line |
|---|---|---|
paint("ok"); |
paint(string word) |
ok |
paint(3); |
paint(int n) |
3 |
paint("hi", "sam"); |
paint(string a, string b) |
hi sam |
paint(); |
paint() |
ready |
Yaygın bir karışıklık, ikisi de paint(string word) diyen iki metot yazıp ikincisinin aşırı yükleme sayılmasını beklemektir. Parametre adını yalnız paint(string label) diye değiştirmek derleyici için yeni bir liste oluşturmaz. Burada tip ve sayı önemlidir. Başka bir karışıklık, hiç bool parametre listesi yazmadığınız halde paint(true) çağırmaktır. O zaman derleme eşleşen bir paint bulamaz. İstediğiniz tipi alan bir başlık ekleyin ya da çağrıyı zaten desteklediğiniz bir tipe çevirin.
Main içinde Console.WriteLine("paint"); yazmak paint sözcüğünü yazar. Hiçbir metodu çağırmaz. string alan aşırı yüklemeyi istediğinizde paint("ok"); tutun. Aynı dosyada kalan bir twice metodu, Main hâlâ twice(7) yazıyorsa ekranı karıştırabilir. Maini test ettiğiniz paint çağrılarına indirin ve o çalıştırma için yalnızca gereken paint aşırı yüklemelerini tutun.
Bir paint metodunu Mainin süslü parantezlerinin içine yuvalamayın. Metotlar sınıfın içinde, Mainin yanında durur. İki aşırı yükleme, aynı sınıf gövdesinde iki kardeş metottur.
Aynı sınıfta bir metot adı ve birkaç parametre listesi tutabilirsiniz. C# gövdeyi çağrının argüman listesinden seçer. Ekran eşleşen gövdenin satırını gösterir. Aynı listeli iki başlık aşırı yükleme değildir. Sonraki sayfa scope’tur; orada hangi adların bir metodun içinde göründüğünü, hangilerinin dışarıda kaldığını görürsünüz.
Ekran eşleşen gövdeyi tutar
Tutacağınız dosya, Main paint("ok"); ve paint(3); çağırınca önce ok, sonra 3 yazar. Paylaşılan ad paint her çağrıdadır ve paint harfleri tırnak içine almadığınız sürece ekranda basılı bir etiket değildir. Bir paint metodunu Main içine yuvalamak bu dersin kurduğu şekil değildir.
🧠 Bilginizi Test Edin
Bilginizi Test Edin
Bu interaktif sınavla kendini test et ve konuyu ne kadar iyi anladığını gör
📝 Talimatlar
- Her soruyu dikkatle okuyun
- Her soru için en iyi cevabı seçin
- Quiz'i istediğiniz kadar tekrar alabilirsiniz
- İlerlemeniz üstte gösterilecek