2011-02-03 7 views
1

VB.NET код является:F # как ДобавитьОбработчик так VB.NET

AddHandler TheGrp.DataChanged, AddressOf theGrp_DataChange 

Так как я могу сделать то же самое с F #?

theGrp.DataChanged.AddHandler(X.theGrp_DataChange) 

Error 1 Эта функция принимает слишком много аргументов, или используется в условиях, когда функция не ожидается

ответ

2

Попробуйте theGrp.DataChanged.AddHandler(fun o e -> X.theGrp_DataChange(o, e)). Подпись для AddHandler указывает, что она принимает делегат, поэтому вы можете явно создать ее (через что-то вроде DataChangedEventHandler(fun o e -> X.theGrp_DataChange(o, e))), или вы можете позволить компилятору неявно добавить конструктор делегата при определении функции, но вы не можете просто использовать метод сам.

2

В качестве альтернативы, если вы не хотите, чтобы создать лямбда-выражение в явном виде, вы можете также писать (В этом случае функция подпись соответствует подписи, необходимой делегат, поэтому он должен работать):

theGrp.DataChanged.AddHandler(DataChangedEventHandler(x.theGrp_DataChanged)) 

Кроме того, если вы не нужны отправитель аргумент, вы можете объявить метод theGrp_DataChanged брать только аргументов события аргумент, а затем написать просто:

theGrp.DataChanged.Add(x.theGrp_DataChanged) 
Смежные вопросы