gpt4 book ai didi

vb.net - 反射(reflection):如果该属性具有非公共(public)(私有(private)/ protected )Setter,如何从属性信息对象中查找?

转载 作者:行者123 更新时间:2023-12-01 10:15:16 27 4
gpt4 key购买 nike

我在论坛/互联网上搜索了解决方案(公共(public)属性的)PropetryInfo 对象如何显示它是否具有 Private\Protected Setter ......这一切都是徒劳的......我找到的所有帮助都是关于如何“设置”具有私有(private) Setter 的公共(public)属性的值...

我想知道如果我有一个公共(public)属性的 PropertyInfo 对象,我怎么知道它的 Setter 是否是非公共(public)的?

我尝试在异常处理 block 中执行 PropertyInfo 对象的 GetValue,然后通过设置相同的值来调用 SetValue...但令我惊讶的是它运行良好并且没有出错。

非常感谢您的帮助...

例如

Public Class Class1
Public Property HasContextChanged() As Boolean
Get
Return _hasContextChanged
End Get
Protected Set(ByVal value As Boolean)
_hasContextChanged = value
End Set
End Property

Public Function CanWriteProperty(Optional ByVal propName As String = "HasContextChanged") As Boolean
Dim prInfo As PropertyInfo = Me.GetType.GetProperty(propName)
If prInfo Is Nothing Then Return False
If Not prInfo.CanWrite Then
Return False
Else
Try
Dim value As Object = prInfo.GetValue(ownObj, Nothing)
prInfo.SetValue(ownObj, value, Nothing) 'Works for Private Setter
Catch ex As Exception
Return False 'Not coming here whatsoever
End Try
End If
Return True
End Function

下课

谢谢

Vinit sankhe.

最佳答案

一旦你有了 PropertyInfo对于该属性,您可以调用其 GetSetMethod函数返回 MethodInfo对于集合访问器。然后您可以检查 MethodInfoIsPublic属性以查看设置访问器是否是公共(public)的。

Dim prInfo As PropertyInfo = Me.GetType.GetProperty(propName)
Dim method as MethodInfo = prInfo.GetSetMethod()
If Not method.IsPublic Then
Return False
Else
Dim value As Object = prInfo.GetValue(ownObj, Nothing)
prInfo.SetValue(ownObj, value, Nothing) 'Works for Private Setter
End If

关于vb.net - 反射(reflection):如果该属性具有非公共(public)(私有(private)/ protected )Setter,如何从属性信息对象中查找?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1340923/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com