Не удается назначить делегировать анонимный метод с менее конкретным типом параметра [duplicate]
На этот вопрос уже есть ответ:
Не удается назначить делегировать анонимный метод с менее конкретным типом параметра 3 ответаpublic class Program
{
delegate void Srini(string param);
static void Main(string[] args)
{
Srini sr = new Srini(PrintHello1);
sr += new Srini(PrintHello2); //case 2:
sr += new Srini(delegate(string o) { Console.WriteLine(o); });
sr += new Srini(delegate(object o) { Console.WriteLine(o.ToString()); }); //case 4:
sr += new Srini(delegate { Console.WriteLine(“This line is accepted,though the method signature is not Comp”); });//case 5
sr("Hello World");
Console.Read();
}
static void PrintHello1(string param)
{
Console.WriteLine(param);
}
static void PrintHello2(object param)
{
Console.WriteLine(param);
}
}
Compiler не жалуется на случай 2 (см. Комментарий), причина в том, что строка наследуется от объекта. В том же духе, почему он жалуется на анонимные типы методов (см. Комментарий // case 4 :), что
Не удается преобразовать анонимный метод в тип делегирования «DelegateTest.Program.Srini», поскольку типы параметров не соответствуют типам параметров делегат
где как в случае нормального метода это не так? Или я сравниваю яблоки с апельсинами? Другой случай, почему он принимает анонимный метод без параметров?