Здравствуйте, Zhilich, Вы писали:
Z>using System;
Z>using System.Collections.Generic;
Z>using System.Text;
Z>namespace ConsoleApplication1
Z>{
Z> public class Program
Z> {
Z> public void f(params object[] o) { } // метод 1
Z> public void f(object o) { } // метод 2
Z> static void Main(string[] args)
Z> {
Z> Program program = new Program;
Z> program.f(5);
Z> }
Z> }
Z>}
Z>Эта программа успешно компилируется, однако очевидна неоднозначность (какой из методов будет вызван?). Считаете ли вы это нормальным явлением в специфике языка C#?
Интуитивно понятно, что предпочтение должно отдаваться методам с конкретной сигнатурой, т. е. вызовется метод 2.
Этот шаблон, между прочим, используется во фреймворке, например
String.Format(string format, object arg0);
String.Format(string format, object arg0, object arg1);
String.Format(string format, object arg0, object arg1, object arg2);
String.Format(string format, params object[] args);
Для 1-3 аргументов вызывается специальный метод (с большей эффективностью), для остальных — общий