MST
星途 面试题库

面试题:Visual Basic反射实现动态调用方法

假设你有一个类库,其中包含多个不同的类,这些类都有一个名为`Execute`的方法,但参数列表和返回值类型可能不同。现在要求你使用Visual Basic的反射机制,根据用户在运行时输入的类名和参数,动态调用对应的`Execute`方法,并处理可能出现的异常。请详细描述实现思路并给出主要代码框架。
49.7万 热度难度
编程语言Visual Basic

知识考点

AI 面试

面试题答案

一键面试

实现思路

  1. 获取程序集:使用反射获取包含这些类的程序集。
  2. 获取类型:根据用户输入的类名,在程序集中获取对应的类型。
  3. 创建实例:使用反射创建该类型的实例。
  4. 获取方法:获取该类型中的 Execute 方法。
  5. 调用方法:根据用户输入的参数,调用 Execute 方法,并处理可能出现的异常。

主要代码框架

Imports System.Reflection

Module Module1
    Sub Main()
        Dim className As String
        Dim parameterValues As String()
        '假设从用户输入获取类名和参数
        Console.Write("请输入类名: ")
        className = Console.ReadLine()
        Console.Write("请输入参数(以逗号分隔): ")
        parameterValues = Console.ReadLine().Split(",")

        Try
            '获取当前程序集
            Dim assembly As Assembly = Assembly.GetExecutingAssembly()
            '获取指定类的类型
            Dim targetType As Type = assembly.GetType(className)
            If targetType Is Nothing Then
                Console.WriteLine($"找不到类型 {className}")
                Return
            End If

            '创建类的实例
            Dim instance As Object = Activator.CreateInstance(targetType)
            If instance Is Nothing Then
                Console.WriteLine($"无法创建 {className} 的实例")
                Return
            End If

            '获取 Execute 方法
            Dim executeMethod As MethodInfo = targetType.GetMethod("Execute")
            If executeMethod Is Nothing Then
                Console.WriteLine($"类型 {className} 中找不到 Execute 方法")
                Return
            End If

            '准备参数
            Dim parameters As Object() = parameterValues.Select(Function(p) Convert.ChangeType(p, executeMethod.GetParameters()(0).ParameterType)).ToArray()
            '调用 Execute 方法
            Dim result As Object = executeMethod.Invoke(instance, parameters)
            Console.WriteLine($"Execute 方法返回值: {result}")
        Catch ex As Exception
            Console.WriteLine($"发生异常: {ex.Message}")
        End Try
    End Sub
End Module