【问题标题】:Delegate on a property代表财产
【发布时间】:2013-12-15 20:00:16
【问题描述】:

我已经看到了一些 c# 的解决方法,但我使用的是 vb.net,我不能为属性调用委托,最后我不知道怎么做,而且似乎没有人能直截了当回答

如果有人这样做:如何为属性添加或创建委托

【问题讨论】:

  • 您能否通过向我们展示 C# 解决方法来说明您在 VB.NET 中寻找的内容?
  • 是的,给我一分钟编辑我没有找到它:S
  • 委托需要一个目标方法。所以写一个返回属性的。使用 lambda 使其紧凑。
  • 好的,谢谢,我会调查的

标签: .net vb.net properties delegates


【解决方案1】:

对于 TProp 类型的名为 PropertyName 的属性,底层实现是 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-21
    相关资源
    最近更新 更多