Не удается назначить делегировать анонимный метод с менее конкретным типом параметра [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», поскольку типы параметров не соответствуют типам параметров делегат

где как в случае нормального метода это не так? Или я сравниваю яблоки с апельсинами? Другой случай, почему он принимает анонимный метод без параметров?

Ответы на вопрос(1)

Ваш ответ на вопрос