type
Delegate1Name = procedure(arg1: byte);
Delegate2Name = function(arg1: byte): word;
begin end.
Более того, в pabc.net так же возможно объявлять анонимные делегаты:
begin
var p1: procedure(arg1: byte);
var f1: function(arg1: byte): word;
end.
Но, конечно, это объявление на то и анонимное, что даже если объявить их одинаково - типы будут разные:
begin
var p1: procedure(arg1: byte) := a->exit();
var p2: procedure(arg1: byte) := a->exit();
writeln(p1.GetType = p2.GetType); // False
end.
В паскале анонимные делегаты работают, в отличии от C#, потому что тут у всех делегатов есть operator implicit для приведения к типу любого другого делегата с теми же параметрами и возвращаемым значением:
begin
var p1: procedure(arg1: byte) := a->exit();
var p2: procedure(arg1: byte) := a->exit();
p2 := p1; // компилируется нормально
end.
Так же ещё есть 3 вид объявления, в формате лямбды:
begin
var p1: byte->(); // процедура с 1 параметром
var p2: (byte,word)->(); // процедура с 2 параметрами
var f1: ()->byte; // функция без параметров
end.
Но этот код заменяется на System.Func<> и System.Action<> при компиляции.