Cu toții am auzit de parametrii opționali. VB suporta de foarte multa vreme. Începînd cu .NET 4.0 si C# suporta parametrii opționali.
Pe scurt parametrii opționali iți permit să ai parametrii la o metoda cu o valoarea default. A.i. acești parametrii pot fi omiși din apel.
Pe scurt parametrii opționali iți permit să ai parametrii la o metoda cu o valoarea default. A.i. acești parametrii pot fi omiși din apel.
public static void Example(string s1, string s2 = "2",
string s3 = "3")
{
Console.WriteLine(s3);
}
Apelul poate să fie de forma următoare:
Example("1","21","31");Example("1","2");Example("1");
Dar ce se întîmpla dacă avem doua versiune de assemply. In noua versiune va hotărați să adaugăm metoda:
public static void Example(string s1, string s3 = "3")
{
Console.WriteLine(s3);
}
Apel:Example("1","2");
Dacă nu recompilam clientul, dar adaugăm noua versiune de assembly, metoda apelata o să fie tot cea din prima versiune. Dar ce se întîmpla dacă recompilați clientul cu a doua versiune de assembly? Fara nici o problema se va apela metoda adăugată in a doua versiune de assembly.
Acuma o să spuneți ca ceea ce se întîmpla este normal. 100% corect. Dar problema apare cu adevărat cînd adaugați un nou overload la o metoda cu parametrii opționali care are mai putini parametrii decît prima metoda, ca in exemplul de mai sus. Toate apelurile care spre metoda veche o să meargă spre noua metoda, ceea ce poate să ducă la un comportament neașteptat.
Comments
Post a Comment