Dzisiaj pisałem mały program, aby zrozumieć podstawy opcjonalnych parametrów języka C#.Nie można zrozumieć wyników metod z Opcjonalnym parametrem
Poniżej program:
abstract class AbstractClass
{
internal abstract void Test();
}
sealed class DerivedClass : AbstractClass
{
internal override void Test()
{
Console.WriteLine("In override DerivedClass.Test() method");
}
internal void Test(int a = 1)
{
Console.WriteLine("In DerivedClass.Test(int a=1) method " + a);
}
internal void Test(int b, int a = 1)
{
Console.WriteLine("In DerivedClass.Test(int b, int a=1) method " + string.Format("{0} {1}", b, a));
}
}
To jak zadzwoniłem Test()
metody:
DerivedClass d = new DerivedClass();
d.Test();
d.Test(6);
d.Test(b:7);
wyjściowa:
W DerivedClass.Test (int a = 1) metoda 1
W DerivedClass.Test (int a = 1) Metoda 6
W DerivedClass.Test (Int b a = 1 int) Metoda 7 1
chodzi d.Test();
: Tutaj mi się, to będzie Test()
traktować jako metoda z opcjonalnym parametr i wywoła Test(int a = 1)
tym wynikiem:
W DerivedClass.Test (int a = 1) metoda 1
Ale to co mnie dezorientuje podczas wykonywania d.Test(6);
: Dlaczego ta metoda połączenia nie daje wyjście jak:
W DerivedClass.Test (int b, int a = 1) Metoda 6 1
Jak na moje rozumienie „6” to parametr obowiązkowy i powinien powołać
internal void Test(int b, int a = 1)
łaskawie wyjaśnić, co jest nie tak z moim zrozumieniem.
Również jak wywołać metodę overriden?
internal override void Test()
Dlaczego "Test (6)" należy wywołać 'Test (int b, int a = 1)'? Istnieje już metoda "Test (int a = 1)", która jest wywoływana przez 'a' ustawiony na' 6'. –
Zobacz ["Czy pytania powinny zawierać" znaczniki "w tytułach?] (Http://meta.stackexchange.com/questions/19190/should-questions-include-tags-in-their-titles), gdzie konsensus jest "nie, nie powinni"! –
@Dennis_E Ale dlaczego "Test (int a = 1)" jest wywoływany w pierwszym przypadku, gdy istnieje dużo lepsze dopasowanie bez żadnych parametrów? – HimBromBeere