6

C# 4.0 ile ilgili bazı sunumlardan geçiyordum ve sonunda sunucu aşağıdaki kodla bir test yayınladı. Bu çıkışı (sunucu olmadan sunuyu çevrimdışı okuma sorununu) üretilir nedenC# Adlandırılmış parametreler, Kalıtım ve aşırı yükleme sürprizi

using System; 
class Base { 
    public virtual void Foo(int x = 4, int y = 5) { 
        Console.WriteLine("B x:{0}, y:{1}", x, y); 
    } 
} 

class Derived : Base { 
    public override void Foo(int y = 4, int x = 5) { 
        Console.WriteLine("D x:{0}, y:{1}", x, y); 
    } 
} 

class Program { 
    static void Main(string[] args) { 
        Base b = new Derived(); 
        b.Foo(y:1,x:0); 
    } 
} 

// The output is 
// D x:1, y:0 

ben çözemedim. Ben bulamadı ama hala bulamadı ağını araştırdı. Birisi bunu açıklayabilir mi?

+0

Bu, adlandırılmış parametreler ile ilgisi yoktur. Polimorfizmin ne olduğunu öğren. –

+0

Sorun, herhangi bir geliştiricinin Derived.Foo'nun polimorfizmden dolayı çağrılmasını beklemesidir. Bu yüzden, bir kişinin Derived.Foo'daki adlandırılmış parametrelerin alınacağını düşünmesi normaldir. Ancak bu çalışma zamanı polimorfizm derleyicisi olduğundan, Base.Foo'dan parametre isimlerini kullanır. – ferosekhanj

cevap

3

nedeni aşağıdaki gibi görünüyor: Sen Base üzerine Foo aradığınız, bu nedenle Base.Foo parametre adlarını alır. x ilk parametresi olduğundan ve y ikinci parametresi olduğundan, bu sıra, değerleri geçersiz yöntemine geçirirken kullanılır.