То же самое - без различий. Компилятор определяет тип делегата и делает это автоматически для вас. Синтаксический сахар для облегчения вашей жизни
Только что проверил с C # -в глубине. Эта функция называется " Преобразование групп методов "; добавлено в C # 2.0
например. из книги
static void MyMethod() { ... }
static void MyMethod( object sender, EventArgs e) {...}
static void Main() {
ThreadStart x = MyMethod; // binds to first overload
EventHandler y = MyMethod; // binds to second overload
}
Если я открою это в отражателе, вы увидите, что компилятор только что создал для вас экземпляры делегатов нужного типа, конечно, за кулисами.
L_0000: ldnull
L_0001: ldftn void CS.Temp.Program::MyMethod()
L_0007: newobj instance void [mscorlib]System.Threading.ThreadStart::.ctor(object, native int)
L_000c: pop
L_000d: ldnull
L_000e: ldftn void CS.Temp.Program::MyMethod(object, class [mscorlib]System.EventArgs)
L_0014: newobj instance void [mscorlib]System.EventHandler::.ctor(object, native int)
L_0019: pop