Как определяется какие типы делегатов совместимы? К примеру, почему данный код валиден?
begin
var act1: Action0 := procedure() -> exit;
var act2: procedure := act; // Почему так можно?
end.
В С#:
using System;
namespace ConsoleApp1
{
public delegate void MyAction();
class Program
{
public static Action action;
static void Main(string[] args)
{
MyAction action2 = () => Console.WriteLine();
action = action2;
}
}
}
выдаст ошибку компиляции:
Неявное преобразование типа “ConsoleApp1.MyAction” в “System.Action” невозможно (CS0029) - C:\Users\Admin\Documents\SharpDevelop Projects\Test1\Test1\Program.cs:23,20
.