Я смущен, почему это компилирует:
private delegate int MyDelegate(int p1, int p2);
private void testDelegate()
{
MyDelegate imp = delegate
{
return 1;
};
}
MyDelegate должен быть указателем на метод, который берет два международных параметра и возвращает другой интервал, правильно? Почему мне разрешают присвоить метод, который не берет параметров?
Интересно, они не компилируют (это жалуется на несоответствия подписи, как я ожидал бы),
private void testDelegate()
{
// Missing param
MyDelegate imp = delegate(int p1)
{
return 1;
};
// Wrong return type
MyDelegate imp2 = delegate(int p1, int p2)
{
return "String";
};
}
Спасибо за любую справку!
Ryan
Что ж, в первом примере компилятор может легко увидеть, что никакие параметры не используются, и подставить несколько пустышек.
Это похоже на дизайнерское решение, которое находится где-то на пути от указания всего в .NET 1 через анонимные методы в .NET 2 до лямбда-выражений в .Net 3
Ваш первый пример - это сокращенный синтаксис, если делегату не нужны параметры. Если вам нужен хотя бы один из них, вам нужно предоставить их все, поэтому первая часть второго примера не будет компилироваться.