2013-12-15 3 views
2

Я видел некоторое обходное решение с C#, но я использую vb.net, и я не могу назвать делегата для свойства, в elast I doN, t know how, и никто не кажется имеют прямой прямой ответДелегат по объекту

Так что, если кто-то делать: Как добавить или создать делегат для свойства

+0

Вы можете проиллюстрировать то, что вы ищете в VB.NET, показывая нам C# обходной путь? –

+0

да дайте мне минуту Редактировать Не нашёл: S – Mokmeuh

+4

Делегату нужен целевой метод. Поэтому напишите, что возвращает свойство. Сделайте его компактным с лямбдой. –

ответ

0

имущества под названием PropertyName типа TProp основной реализация 2 методов:

  • function get_PropertyName() as TProp
  • sub set_PropertyName(value as TProp)

Вот пример для свойства строки:

Public Delegate Function StringGetter() As String 
Public Delegate Sub StringSetter(value As String) 

Class Test 
    Public Property MyProp As String 
End Class 

Public Sub Main() 

    Dim testObj As New Test With {.MyProp = "Hello"} 

    Dim getter = [Delegate].CreateDelegate(GetType(StringGetter), testObj, "get_MyProp") 
    If CType(getter.DynamicInvoke(), String) <> "Hello" Then Throw New Exception("get failed") 

    Dim setter = [Delegate].CreateDelegate(GetType(StringSetter), testObj, "set_MyProp") 
    setter.DynamicInvoke("Hello2") 
    If testObj.MyProp <> "Hello2" Then Throw New Exception("set failed") 

End Sub 
Смежные вопросы