Как передать общий аргумент делегата методу в .NET 2.0 - PullRequest
3 голосов
/ 07 мая 2010

У меня есть класс с объявлением делегата следующим образом ...

Public Class MyClass  
    Public Delegate Function Getter(Of TResult)() As TResult    

    ''#the following code works.
    Public Shared Sub MyMethod(ByVal g As Getter(Of Boolean))
        ''#do stuff
    End Sub
End Class

Однако я не хочу явно вводить делегат Getter в вызове метода.Почему я не могу объявить параметр следующим образом ...

... (ByVal g As Getter(Of TResult))

Есть ли способ сделать это?

Моя конечная цель состояла в том, чтобы иметь возможность установить делегат для установщиков свойств идобытчики в названном классе.Но мое чтение показывает, что вы не можете этого сделать.Поэтому я помещаю методы setter и getter в этот класс, а затем хочу, чтобы вызывающий класс установил аргумент делегата и затем вызвал его.Есть ли лучшая практика для этого.

В приведенном выше примере я понимаю, что могу установить переменную делегата set из вызывающего класса ... но я пытаюсь создать синглтон с жесткой инкапсуляцией.

Для записи я не могу использовать ни один из новых типов делегатов, объявленных в .net35.

Ответы на C # приветствуются.

Есть мысли?

Сет

Ответы [ 2 ]

7 голосов
/ 07 мая 2010

Вам необходимо добавить параметр универсального типа в метод:

Public Shared Sub MyMethod(Of TResult) (ByVal g As Getter(Of TResult))

В C # это будет

public static void MyMethod<TResult>(Getter<TResult> g) {
3 голосов
/ 07 мая 2010

Вы можете сделать метод, который принимает общий делегат, сам по себе:

Public Shared Sub MyMethod(Of TResult)(ByVal g As Getter(Of TResult))
    'do stuff
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...