Właśnie napotkałem coś z C# dzisiaj, o którym wcześniej nie myślałem. Mam dwie metody w mojej klasie, jedną przeciążającą drugą. Są one zadeklarowane tak:C# parametr params z dwoma parametrami tego samego typu
1) public void RequirePermissions(params string[] permissions)...
2) public void RequirePermissions(string message, params string[] permissions)...
W moim kodu, próbowałem zadzwonić pierwszy z nich w taki sposób:
RequirePermissions("Permission1", "Permission2");
... spodziewałem się nazywać pierwszy przeciążenie. Cóż, nazwała drugie przeciążenie. Jedynym sposobem mogę je nazwać pierwszą metodę w tym przypadku jest ręcznie przekazać string [] obiekt tak:
RequirePermissions(new string[] { "Permission1", "Permission2" });
Teraz takie zachowanie nie mylić mnie, bo rozumiem, że kompilator powiedzieć, którą metodę faktycznie chciałem wywołać na podstawie podanych przeze mnie parametrów. Ale czy nie byłbym ostrożny, to mogło zostać niezauważone w moim kodzie. Wygląda na to, że Microsoft powinien zmusić kompilator do zgłoszenia błędu, gdy napotkał sytuację podobną do powyższej. Czy ktoś ma jakieś przemyślenia na ten temat? Czy istnieje inny sposób na wywołanie pierwszego przeciążenia niż "rozwiązanie", które napisałem?
Zajrzyj tutaj - http://ayende.com/Blog/archive/2007/12/31/Tricky-Code.aspx i tutaj- http: //www.yoda.arachsys .com/csharp/teasers.html (no 6) – RichardOD
Jestem nieco zdezorientowany twoją sugestią. Czy uważasz, że ostrzeżenie powinno dotyczyć niejednoznacznego * połączenia * lub zestawu * deklaracji *, które mogłyby prowadzić do niejednoznacznego połączenia? –