什么是反射?优缺点?什么时候用反射?

反射是一种机制,用于在运行时获取和操作类型的信息。通过反射,可以动态加载程序集,创建对象实例,获取和设置对象的属性值,以及调用对象的方法等,而无需在编译时知道该类型的具体信息。

优点:
动态加载和使用程序集:反射可以在运行时动态加载并使用程序集,实现插件系统或基于配置文件的类型加载。
动态创建对象实例:通过反射可以实现根据动态获取的类型信息创建对象实例,适用于需要在运行时动态创建对象的场景。
访问和调用类型的成员:反射可以通过字符串的方式访问类型的成员,实现通用的对象访问器,方便处理不同类型的对象的操作。
自动生成代码或执行泛型操作:反射可以用于生成代码,或执行在编译时无法确定的泛型操作。

缺点:
性能开销:由于反射涉及到在运行时获取和操作类型的信息,可能会引入一定的性能开销。反射操作的执行效率通常较低,比直接访问成员或调用方法要慢。
编译时检查不可用:反射在编译期间无法进行编译时类型检查,容易造成类型错误。由于反射是动态的,编译器无法对其进行验证,可能导致运行时异常。

使用情况--反射适用于以下情况:
需要动态加载和使用程序集的场景,如插件系统或基于配置文件的类型加载。
需要在运行时根据类型信息动态创建对象实例的场景。
需要通过字符串访问对象的成员,实现通用的对象访问器。
需要生成代码或执行泛型操作的场景。

需要注意的是,在使用反射时应权衡灵活性和性能,并确保使用反射的代码符合预期,避免出现错误和安全问题。

例:(此代码为vb.net)

Private Sub UiLabel1_Click(sender As Object, e As EventArgs) Handles UiLabel1.Click
    Dim tbName As String = "str字符串1"
    FillTb(tbName)
End Sub

Private Sub UiLabel2_Click(sender As Object, e As EventArgs) Handles UiLabel2.Click
    Dim tbName As String = "str字符串2"
    FillTb(tbName)
End Sub

Function FillTb(tbName As String) As Boolean
    '通过对照获取方法名称
    Dim ReflectFunc As String = GetContrastFunc(tbName)
	
	'*代表class文件所在的层次(如有替换即可)
	'Type.GetType方法获取"项目名称"命名空间下的 .*.*.func1所在的class类型
    Dim t = Type.GetType("项目名称.*.*.func1所在的class")
	
	'使用GetMethod方法获取ReflectFunc参数指定的方法信息
    Dim method As MethodInfo = t.GetMethod(ReflectFunc)
    If method Is Nothing Then
        MsgBox("未找到方法",, "提示")
        Return False
    End If
	
    '通过method.Invoke方法调用该方法
    method.Invoke(Nothing, {})
    Return True
End Function


'获取 反射对照函数
Public Shared Function GetContrastFunc(tbName As String) As String
    Dim dic1 As New Dictionary(Of String, String) From {
        {"str字符串1", "func1"},
        {"str字符串2", "func2"}
    }
    Dim retS As String = ""
    If dic1.Keys.Contains(tbName) Then
        retS = dic1.Item(tbName)
    End If
    Return retS
End Function



Public Shared Function func1() As Boolean     
   ‘实际代码
  Return True
End Function
Public Shared Function func2() As Boolean     
   ‘实际代码
  Return True
End Function

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值