2016-08-30 34 views
18

Mam klasy w następujący sposób z dwie metody przeciążenia.Metoda przeciążania za pomocą opcjonalnego parametru

Class A 
{ 
    public string x(string a, string b) 
    { 
     return "hello" + a + b; 
    } 

    public string x(string a, string b, string c = "bye") 
    { 
     return c + a + b; 
    } 
} 

Gdybym wywołać metodę x z innej klasy z dwoma parametrami, które następnie metoda ma wykonać i dlaczego? tj.

string result = new A().x("Fname", "Lname"); 

Przetestowałem to w mojej aplikacji konsolowej i wykonałem metodę z 2 parametrami. Czy ktoś może to wyjaśnić?

+0

Zasadniczo: w takim przypadku jest całkowicie bezużyteczne, aby mieć wartość domyślną, ponieważ nigdy nie będziesz używał go ... – Bakuriu

+6

Jestem zaskoczony, że ten kod nie daje błąd podczas kompilacji. –

Odpowiedz

21

użycie nazwanych i opcjonalnych argumentów wpływa rozdzielczość przeciążeniem:

Jeżeli dwóch kandydatów oceniane są jako równie dobre, preferencja idzie do kandydata, który nie posiada opcjonalne parametry, dla których argumenty zostały pominięte w połączenie. Jest to konsekwencja ogólnego ustawienia w zakresie przeciążenia dla kandydatów, którzy mają mniejszą liczbę parametrów niż .

odniesienia: MSDN


powodujący z reguły powyżej metody 2 parametrami string x(string a,string b) zostanie wywołana.

Uwaga: Jeśli oba przeciążone metody mają parametry opcjonalne następnie kompilator dadzą błędzie niejednoznaczności kompilacji.

+5

Kompilacja da *** czas kompilacji *** błąd niejednoznaczności :) –

+1

zaznaczone i poprawione. Dzięki. – JerryGoyal

4

Jeśli wywołuje się metodę z dwoma parametrami, używa metody z dwoma parametrami. Gdybyś zadzwonił jeden z trzema, użyłby drugiego.

0

Zawsze będzie wykonać metodę, która pierwszy mecz z dokładna liczba parametrów, w twoim przypadku to będzie wykonywał:

Opcjonalne metoda parametr priorytetem jest mniej następnie funkcję z dokładna liczba parametrów

public string x(string a, string b);