Oggi stavo scrivendo un piccolo programma per comprendere i fondamenti dei parametri facoltativi di C#.Impossibile comprendere l'output dei metodi con parametro facoltativo
seguito il programma:
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));
}
}
Ecco come ho chiamato Test()
metodo:
DerivedClass d = new DerivedClass();
d.Test();
d.Test(6);
d.Test(b:7);
uscita:
In DerivedClass.Test (int a = 1) metodo 1
In DerivedClass.Test (int a = 1) Metodo 6
In DerivedClass.Test (int b, int = 1) Metodo 7 1
Per quanto riguarda d.Test();
: Ecco la mia comprensione è, sarà trattare Test()
come metodo con un parametro opzionale, e invocherà Test(int a = 1)
con questo output:
0.123.In DerivedClass.Test (int a = 1) metodo 1
Ma questo è ciò che mi confonde durante l'esecuzione d.Test(6);
: Perché questo metodo chiamata non sta dando in uscita come:
In DerivedClass.Test (int b, int a = 1) Metodo 6 1
Come per la mia comprensione "6" è il parametro obbligatorio e dovrebbe richiamare
internal void Test(int b, int a = 1)
gentilmente spiegare ciò che è sbagliato con la mia comprensione.
Anche come chiamare un metodo sovrascritto?
internal override void Test()
Perché 'Test (6)' invoca 'Test (int b, int a = 1)'? Esiste già un metodo di corrispondenza 'Test (int a = 1)', che viene invocato con 'a' impostato su' 6'. –
Si prega di vedere ["Le domande dovrebbero includere" tag "nei loro titoli?"] (Http://meta.stackexchange.com/questions/19190/should-questions-include-tags-in-their-titles), dove il consenso è "no, non dovrebbero"! –
@Dennis_E Ma perché 'Test (int a = 1)' ha chiamato nel primo caso quando c'è una corrispondenza molto migliore senza parametri? – HimBromBeere