Zanimljivo, znaci ipak je static resoultion. Dodaj jos na ovo i default parametre i inheritance, i cela stvar postaje jedan lep mali overload hell... :)
Napravio sam test primer:
Code (csharp):
class Base
{
protected virtual void Overload
(string s
)
{
Console
.WriteLine("Base typed vanilla called: " + s
);
}
protected virtual void Overload
(string s1,
string s2
= "Default")
{
Console
.WriteLine("Base typed default param called: {0}, {1}", s1, s2
);
}
protected virtual void Overload
(params string[] s
)
{
Console
.WriteLine("Base typed params called: " + String.Join(", ", s
));
}
protected virtual void Overload
(object s
)
{
Console
.WriteLine("Base untyped vanilla called: " + s
);
}
protected virtual void Overload
(object s1,
object s2
= null)
{
s2
= s2
?? "Default";
Console
.WriteLine("Base untyped default param called: {0}, {1}", s1, s2
);
}
protected virtual void Overload
(params object[] s
)
{
Console
.WriteLine("Base untyped params called: " + String.Join(", ", s
));
}
}
class Program
: Base
{
void Overload
(object o,
string s
= "Default")
{
Console
.WriteLine("Derived mixed called: {0}, {1}", o, s
);
}
void Go
()
{
var s
= "String";
var o
= (object)"Object";
Overload
(s
);
Overload
(s, s
);
Overload
(s, s, s
);
Console
.WriteLine();
Overload
(o
);
Overload
(o, o
);
Overload
(o, o, o
);
Console
.WriteLine();
Overload
(s, o
);
Overload
(o, s
);
Console
.WriteLine();
Console
.ReadKey();
}
static void Main
(string[] args
)
{
new Program
().Go();
}
}
Rezultat
Code:
Derived mixed called: String, Default
Derived mixed called: String, String
Base typed params called: String, String, String
Derived mixed called: Object, Default
Base untyped default param called: Object, Object
Base untyped params called: Object, Object, Object
Base untyped default param called: String, Object
Derived mixed called: Object, String
Potpis
if it walks like a duck and quacks like a duck, it could be a dragon doing a duck
impersonation.