动态调用方法和类名

2024-02-13

在某些情况下,我必须从类名中调用方法名。

string scenario1 = "MockScenario1";
string scenario2 = "MockScenario2";

MockScenario1.GetInfo();
MockScenario2.GetInfo();

如何动态使用字符串来调用方法名称,例如

scenario1.GetInfo()
scenario2.GetInfo()

我试图通过字符串和控制空间找出所有选项以找到相关选项。有什么建议么?

我尝试了下面的方法并尝试获取动态生成的类名

下面的代码动态生成方法名称

string methodName = "hello";

//Get the method information using the method info class
 MethodInfo mi = this.GetType().GetMethod(methodName);

//Invoke the method
// (null- no parameter for the method call
// or you can pass the array of parameters...)
mi.Invoke(this, null);

更清晰的场景: 我正在尝试将类名作为参数发送 MockScenario1 和 MockScenario2 是类名。

string scenarioCats = "MockScenario1";
string scenarioDogs = "MockScenario2";
GetResult(scenarioCats);
GetResult(scenarioDogs);

public static void GetCatsResult(string scenarioCats){
scenarioCats obj = new scenarioCats();
    obj.GetInfo();    
}
public static void GetDogsResult(string scenarioDogs){
scenarioDogs obj = new scenarioDogs();
    obj.GetInfo();    
}

如何从字符串表示形式创建类型的实例:

string scenario1 = "TheNamespace.MockScenario1";
Type theType = this.GetType().Assembly.GetType(scenario1);
var theInstance = (MockScenario1)Activator.CreateInstance(theType);
theInstance.GetInfo();

例如,如果您的类实现一个通用接口,那就更好了获取信息感知,然后你可以编写一个更通用的加载器:

var theInstance = (IGetInfoAware)Activator.CreateInstance(theType);

Note:您需要提供场景 1 和场景 2 的完整类名

See 激活器.CreateInstance https://msdn.microsoft.com/en-us/library/system.activator.createinstance.aspx

EDIT:

正如 @Georg 指出的,如果类型未在上下文对象的程序集中声明,则必须首先获取托管该类型的程序集:

var theAssembly = (
    from Assembly assembly in AppDomain.CurrentDomain.GetAssemblies()
    where (assembly.FullName == "TheNamespace.AssemblyName")
    select assembly
)
.FirstOrDefault();

if ( theAssembly!= null ){
    Type theType = theAssembly.GetType(scenario1);
    var theInstance = (IGetInfoAware)Activator.CreateInstance(theType);
    theInstance.GetInfo();
}

如果由于某种原因您不知道程序集名称,则可以按如下方式解析类型:

public Type GetTypeFromString(String typeName)
{
    foreach (Assembly theAssembly in AppDomain.CurrentDomain.GetAssemblies())
    {
        Type theType = theAssembly.GetType(typeName);
        if (theType != null)
        {
            return theType;                    
        }
    }
    return null;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

动态调用方法和类名 的相关文章

  • 如何检查QProcess是否正确执行?

    QProcess process sdcompare QString command sdcompare QStringList args sdcompare command sdcompare diff args sdcompare lt
  • 如何将隐藏字段从一个页面传递到另一页面?

    我有一个 Net 类库 我想从一次代码隐藏页面传递一个隐藏变量 并在另一个代码隐藏页面中获取它 请注意 我没有任何可以使用表单标签和 get post 方法的设计页面 aspx 页面 我们应该怎么做 注意 我想使用隐藏字段将值从一页传递到另
  • 推导指南中的引用和值之间的差异

    考虑类型A template
  • 读取文件特定行号的有效方法。 (奖励:Python 手册印刷错误)

    我有一个 100 GB 的文本文件 它是来自数据库的 BCP 转储 当我尝试导入它时BULK INSERT 我在第 219506324 行上收到一个神秘错误 在解决此问题之前 我想看看这一行 但可惜的是我最喜欢的方法 import line
  • C++中的类查找结构体数组

    我正在尝试创建一个结构数组 它将输入字符串链接到类 如下所示 struct string command CommandPath cPath cPathLookup set an alarm AlarmCommandPath send an
  • 存储来自其他程序的事件

    我想将其他应用程序的事件存储在我自己的应用程序中 事件示例 打开 最小化 Word 或打开文件时 这样的事可能吗 运行程序 http msdn microsoft com en us library ms813609 aspx and 打开
  • 在 C# 中循环遍历文件文件夹的最简单方法是什么?

    我尝试编写一个程序 使用包含相关文件路径的配置文件来导航本地文件系统 我的问题是 在 C 中执行文件 I O 这将是从桌面应用程序到服务器并返回 和文件系统导航时使用的最佳实践是什么 我知道如何谷歌 并且找到了几种解决方案 但我想知道各种功
  • 无法在 Windows 运行时组件库的 UserControl 中创建依赖项属性

    我想在用户控件内创建数据可绑定属性 这个用户控件包含一个 Windows 运行时组件 项目 我使用下面的代码来创建属性 public MyItem CurrentItem get return MyItem GetValue Current
  • ASP.NET:获取自 1970 年 1 月 1 日以来的毫秒数

    我有一个 ASP NET VB NET 日期 我试图获取自 1970 年 1 月 1 日以来的毫秒数 我尝试在 MSDN 中寻找方法 但找不到任何东西 有谁知道如何做到这一点 从 NET 4 6 开始 该方法ToUnixTimeMillis
  • 关于在 Windows 上使用 WiFi Direct Api?

    我目前正在开发一个应用程序 我需要在其中创建链接 阅读 无线网络连接 在桌面应用程序 在 Windows 10 上 和平板电脑 Android 但无关紧要 之间 工作流程 按钮 gt 如果需要提升权限 gt 创建类似托管网络的 WiFi 网
  • 将 Excel 导入到 Datagridview

    我使用此代码打开 Excel 文件并将其保存在 DataGridView 中 string name Items string constr Provider Microsoft Jet OLEDB 4 0 Data Source Dial
  • Rx 中是否有与 Task.ContinueWith 运算符等效的操作?

    Rx 中是否有与 Task ContinueWith 运算符等效的操作 我正在将 Rx 与 Silverlight 一起使用 我正在使用 FromAsyncPattern 方法进行两个 Web 服务调用 并且我想这样做同步地 var o1
  • 获取包中声明的所有 Java 类的名称

    我正在编写一个功能 它将有助于将类放入我的程序的某个包中 另外 我只想要子类某个类的类 我需要这些类才能调用它们的静态方法 有没有一种自动的方法来做到这一点 如果是的话 速度慢吗 如果我不清楚 我想要的是这样的 ArrayList
  • 如何在 Blackberry Cascades 中显示具有特定号码的电话板

    我正在使用带有 C QT 和 QML 的 Blackberry Cascades 10 Beta 3 SDK 以及 Blackberry 10 Dev Alpha Simulator 和 QNX Momentics IDE 并且我正在尝试实
  • 如何将自定义 JSON 文件添加到 IConfiguration 中?

    我正在使用 asp net Autofac 我正在尝试加载自定义 JSON 配置文件 并基于该文件创建 实例化 IConfiguration 实例 或者至少将我的文件包含到默认情况下构建的 IConfiguration asp net 中
  • 使用 Moq 使用内部构造函数模拟类型

    我正在尝试模拟 Microsoft Sync Framework 中的一个类 它只有一个内部构造函数 当我尝试以下操作时 var fullEnumerationContextMock new Mock
  • 将 log4net 与 Autofac 结合使用

    我正在尝试将 log4net 与 Autofac 一起使用 我粘贴了这段代码http autofac readthedocs org en latest examples log4net html http autofac readthed
  • HttpWebRequest 在第二次调用时超时

    为什么以下代码在第二次 及后续 运行时超时 代码挂在 using Stream objStream request GetResponse GetResponseStream 然后引发 WebException 表示请求已超时 我已经尝试过
  • 用于 C# 的 TripleDES IV?

    所以当我说这样的话 TripleDES tripledes TripleDES Create Rfc2898DeriveBytes pdb new Rfc2898DeriveBytes password plain tripledes Ke
  • 英特尔 Pin 与 C++14

    问题 我有一些关于在 C 14 或其他 C 版本中使用英特尔 Pin 的问题 使用较新版本从较旧的 C 编译代码很少会出现任何问题 但由于 Intel Pin 是操作指令级别的 如果我使用 C 11 或 C 14 编译它 是否会出现任何不良

随机推荐

  • Android监听应用程序中的所有事件

    我想监听手机上的所有用户事件 例如onTouch onClick onMenuItemClickedETC 为此 我创建了一个扩展活动的超级类 所有活动都从该类扩展 public class TopActivity extends Acti
  • 如何删除 MongoDB 中的 _id 并替换为另一个字段作为主键?

    我收藏了大量文件 我想从所有文档中删除自动生成的对象 ID id 键 并将其替换为另一个字段作为主键 我不明白为什么首先需要一个默认的对象 ID 在 mongodb 中 每个文档必须是唯一的 因此您需要一个唯一的字段来用作 id 如果您不提
  • 在原型中,如何将地图定义为自定义选项

    在我的原型文件中 我想将地图定义为自定义选项 尝试了一些方法 但没有一个起作用 我的元数据原型文件 syntax proto2 import google protobuf descriptor proto package com util
  • Android 中的滚动与 WebView 完美配合

    我有一个布局 我正在通过 WebView 在其中渲染 HTML 文档 XML 布局是
  • 如何重命名 ASP.NET 5 Web 项目中用作 Web 根目录的“wwwroot”文件夹

    我想将 ASP NET 5 项目中的 Web 根文件夹重命名为wwwroot 当我手动重命名该文件夹时 项目不再将其识别为 Web 根文件夹 项目属性页面不允许修改 Web 根目录 有没有办法重命名和 或重新分配 ASP NET 5 Web
  • 在 CSS 网格中从底部开始填充单元格

    我有一个 3 行的 CSS 网格 可能要填的项目还不到3个 我想从底部开始填 我创建了一个jsFiddle https jsfiddle net Lexogram vd7g4x5e 8 供你玩 但目前它无法达到我想要的效果 html bod
  • 在选项卡式窗口中显示输出

    我用 Java 为 Linux 开发了一个任务管理器 目前的输出显示在控制台中 而选项卡式窗口单独出现 这是使用 Java Swing 完成的 现在我希望控制台的输出显示在选项卡式窗口中 我该怎么做 有一些我用过的课程 一个用于任务管理器功
  • UITableView 滚动时单元格数据显示不正确

    我面临一些奇怪的问题 每当我滚动表格视图时 我的数据就会被其他单元格替换 每次 它都会被不同的单元格数据替换 我在这个替换中没有看到任何特定的模式 cell UITableViewCell alloc initWithStyle UITab
  • 如何将此node.js模块降级到特定版本并防止以后自动升级?

    我正在使用node js Nodemailer模块并遇到以下错误 错误 不支持的配置 将 Nodemailer 降级到 v0 7 1 或 请参阅迁移指南https github com andris9 Nodemailer migratio
  • HTML 详细信息/摘要元素标记样式

    我有一些 CSS 可以对详细信息元素中的摘要元素旁边的标记进行样式设置 CSS 本身工作得很好 但是 如果我在第一个详细信息元素中嵌套另一个详细信息元素 创建父详细信息元素和子详细信息元素 我的标记内容将无法正确切换 一旦我打开父元素 子标
  • Postcss - 颜色函数插件 - “无法从字符串解析颜色”

    使用以下 postcss 插件 postcss cssnext postcss 嵌套 postcss 颜色函数 使用以下颜色函数时 我经常遇到以下错误 Unable to parse color from string l 20 样式 cs
  • Winforms 到 WPF 的转换:BeginInvoke 到什么?

    这是我在 WinForms 中的旧代码 private void ValueChanged double inValue1 double inValue2 only manual mode for this driver so that s
  • 在没有循环的情况下找到两个向量中的最大值?

    如果有两个向量 比如说x and y for i in 1 length x z i max x i y i 你能帮我在不使用循环的情况下执行此操作吗 假设向量x and y具有相同的长度 pmax是你的函数 z pmax x y 如果长度
  • sql server中schema的重要性是什么?

    sql server中schema的重要性是什么 这个模式对我有什么帮助 出于安全原因这很重要吗 Yes SQL 模式的主要目的是促进安全管理 定义谁 哪些主体 可以访问什么 哪些数据库对象 从 SQL 2005 开始 当架构不再直接与所有
  • php shell exec wget 不在后台运行

    我想按如下方式运行 wget shell exec wget http somedomain com somefile mp4 sleep 20 continue my code 我想要的是让 PHP 等待 shell exec wget
  • 控制台应用程序相互通信的推荐方式是什么?

    我有一个用 C 编写的控制台应用程序系统 在不同的机器上运行 我用的是MSMQ 我的问题是 如何使我的控制台应用程序相互通信 我这样问是因为我想创建一个新的控制台应用程序 其他应用程序可以查询该应用程序以了解 MSMQ 中的消息数量 编辑1
  • 我可以在 pom 或 settings.xml 中包含 mvn deploy:deploy-file 而不是 cli goal

    我需要将自定义 jar 与从我的 Java 项目生成的 jar 一起部署到 Artifactory 目前我能找到的唯一方法是通过命令行目标使用 mvn deploy deploy file DgroupId
  • 配置套接字 ACK 超时?

    有没有办法配置套接字在决定连接失败之前期望收到已发送数据的 ACK 的超时 我知道这也可以在应用程序级别完成 但是由于我发送的每个数据包都已被确认 并且我只想知道是否收到了我的数据 因此在应用程序级别使用附加数据来完成相同的任务事情似乎很浪
  • Nexus3:推送到 Docker Group Repo

    I have Nexusv3 6 and created a Docker repo docker repo type hosted and a Docker group docker group type group For both I
  • 动态调用方法和类名

    在某些情况下 我必须从类名中调用方法名 string scenario1 MockScenario1 string scenario2 MockScenario2 MockScenario1 GetInfo MockScenario2 Ge