How do I create a delegate for a .NET property?

后端 未结 6 1820
眼角桃花
眼角桃花 2020-12-02 23:21

I am trying to create a delegate (as a test) for:

Public Overridable ReadOnly Property PropertyName() As String

My intuitive attempt was de

6条回答
  •  一生所求
    2020-12-03 00:20

    VB version:

    Dim prop As PropertyInfo = GetType(foo).GetProperty("bar")
    Dim foo1 As New foo
    
    Dim getForAnyFoo As Func(Of foo, String) = TryCast([Delegate].CreateDelegate(GetType(Func(Of foo, String)), Nothing, prop.GetGetMethod()), Func(Of foo, String))
    
    Dim setForAnyFoo As Action(Of foo, String) = TryCast([Delegate].CreateDelegate(GetType(Action(Of foo, String)), Nothing, prop.GetSetMethod()), Action(Of foo, String))
    
    Dim getForFixedFoo As Func(Of String) = TryCast([Delegate].CreateDelegate(GetType(Func(Of String)), foo1, prop.GetGetMethod()), Func(Of String))
    
    Dim setForFixedFoo As Action(Of String) = TryCast([Delegate].CreateDelegate(GetType(Action(Of String)), foo1, prop.GetSetMethod()), Action(Of String))
    
        setForAnyFoo(foo1, "abc")
        Debug.WriteLine(getForAnyFoo(foo1))
    
        setForFixedFoo("def")
        Debug.WriteLine(getForFixedFoo())
    

提交回复
热议问题