Хмм ... это работает в C #:
using System;
class Test
{
delegate void Foo(params string[] args);
static void Main()
{
Foo f = x => Console.WriteLine(x.Length);
f("a", "b", "c");
}
}
Однако вы правы - эквивалентное объявление делегата в VB завершается неудачно:
Delegate Sub Foo(ParamArray ByVal args() As String)
Дает:
ошибка BC33009: параметры делегата не могут быть объявлены как ParamArray.
Любопытный. К счастью, есть способ обойти это:
Imports System
Public Class Test
Delegate Sub Foo(<[ParamArray]()> ByVal args() As String)
Public Shared Sub Main()
Dim f As Foo = AddressOf PrintLength
f("a", "b", "c")
End Sub
Private Shared Sub PrintLength(ByVal x() As String)
Console.WriteLine(x.Length)
End Sub
End Class
В основном я только что применил ParamArrayAttribute
вручную. Кажется, работает нормально.
Однако ничто из этого не помешало бы вам в любом случае использовать существующие методы ParamArray
. Эти методы вполне способны принимать обычные массивы - так что вы могли бы объявить ваши типы делегатов как нормальные и по-прежнему создавать экземпляры делегатов, которые ссылались на эти методы без проблем вообще. Тип делегата влияет только на то, как вы сможете вызвать делегата.
Кроме объявления типа делегата с массивом параметров, я не вижу, в чем проблема.