使用委托调用构造函数

2024-04-20

I found this http://blogs.msdn.com/haibo_luo/archive/2005/11/17/494009.aspx但尝试使用它但失败了。

如何使用反射创建对象并通过将其放入委托中来使其快速?

        DynamicMethod dm = new DynamicMethod("MyCtor", t, new Type[] { });            
        var ctor = t.GetConstructor(new Type[] { });
        ILGenerator ilgen = dm.GetILGenerator();
        ilgen.Emit(OpCodes.Ldarg_0);
        ilgen.Emit(OpCodes.Newobj, ctor);
        ilgen.Emit(OpCodes.Ret);
        var d = (Func<T>)dm.CreateDelegate(t);
        dm.Invoke(null, new object[] { });

在将其放入 deleage 之前,我尝试至少调用它,当我执行上述操作时,我收到错误

An unhandled exception of type 'System.Reflection.TargetInvocationException' occurred in mscorlib.dll

附加信息:调用目标已引发异常。

如果我调用 d() 相反,我会得到异常

An unhandled exception of type 'System.ArgumentException' occurred in mscorlib.dll

Additional information: Type must derive from Delegate.

如何将无参数构造函数放入委托中并调用它?


如果您有权访问 .NET 3.5(您使用的Func<T>建议),你可能会发现ExpressionILGenerator:

class Foo { }
static void Main() {
    Func<Foo> func = GetCtor<Foo>(); // cache this somewhere!
    Foo foo = func();
}
static Func<T> GetCtor<T>() {
    Type type = typeof(T);
    Expression body = Expression.New(type);
    return Expression.Lambda<Func<T>>(body).Compile();        
}

很容易扩展它以使用特定的构造函数、传递参数或添加构造函数后属性绑定;强制转换、转换等(参见这个相关答案 https://stackoverflow.com/questions/2044371/2044434#2044434)。如果您有特定的场景,我很乐意添加一个示例。

另请注意,您应该缓存并重用任何此类构造函数 - 否则您将失去好处(即不要在每次调用时重新创建委托)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用委托调用构造函数 的相关文章

  • 检测到 NuGet 包的版本冲突

    我正在开发 ASP Net core 2 1 Web 应用程序项目 我的解决方案中有 1 个项目和 3 个其他库 它是高级架构 数据访问层 DAL 业务层 BL 公共层 CL 所以我需要添加引用来连接一些库和项目 我已经添加了CL参考我的项
  • Tensorflow 中的自定义资源

    由于某些原因 我需要为 Tensorflow 实现自定义资源 我试图从查找表实现中获得灵感 如果我理解得好的话 我需要实现3个TF操作 创建我的资源 资源的初始化 例如 在查找表的情况下填充哈希表 执行查找 查找 查询步骤 为了促进实施 我
  • 赋值运算符和复制构造函数有什么区别?

    我不明白C 中赋值构造函数和复制构造函数之间的区别 是这样的 class A public A cout lt lt A A lt lt endl The copy constructor A a b The assignment cons
  • 为什么基类必须有一个带有 0 个参数的构造函数?

    这不会编译 namespace Constructor0Args class Base public Base int x class Derived Base class Program static void Main string a
  • 在 OpenCL 中将函数作为参数传递

    是否可以在 OpenCL 1 2 中将函数指针传递给内核 我知道可以用C实现 但不知道如何在OpenCL的C中实现 编辑 我想做这篇文章中描述的同样的事情 在 C 中如何将函数作为参数传递 https stackoverflow com q
  • 捕获 foreach 条件中抛出的异常

    我有一个foreach在 foreach 本身的条件下循环期间中断的循环 有没有办法try catch抛出异常然后继续循环的项 这将运行几次 直到异常发生然后结束 try foreach b in bees exception is in
  • Blazor 与 Razor

    随着 Blazor 的发明 我想知道这两种语言之间是否存在显着的效率 无论是在代码创建方面还是在代码的实际编译 执行方面 https github com SteveSanderson Blazor https github com Ste
  • 有什么工具可以说明每种方法运行需要多长时间?

    我的程序的某些部分速度很慢 我想知道是否有我可以使用的工具 例如它可以告诉我可以运行 methodA 花了 100ms 等等 或者类似的有用信息 如果您使用的是 Visual Studio Team System 性能工具 中有一个内置分析
  • Guid 应包含 32 位数字和 4 个破折号

    我有一个包含 createuserwizard 控件的网站 创建帐户后 验证电子邮件及其验证 URL 将发送到用户的电子邮件地址 但是 当我进行测试运行时 单击电子邮件中的 URL 时 会出现以下错误 Guid should contain
  • try-catch 中未处理的异常

    try list from XElement e in d Descendants wix File where e Attribute Name Value Contains temp Name e Parent Parent Attri
  • ZLIB 解压缩

    我编写了一个小型应用程序 该应用程序应该解压缩以 gzip deflate 格式编码的数据 为了实现这一点 我使用 ZLIB 库 使用解压缩功能 问题是这个功能不起作用 换句话说 数据不是未压缩的 我在这里发布代码 int decompre
  • VS30063:您无权访问 https://dev.azure.com

    我正在尝试在 asp net core 2 1 mvc 应用程序中使用以下代码连接 Azure DevOps Uri orgUrl new Uri https dev azure com xxxxx String personalAcces
  • C++派生模板类继承自模板基类,无法调用基类构造函数[重复]

    这个问题在这里已经有答案了 我试图从基类 模板 继承 派生类也是模板 它们具有相同的类型 T 我收到编译错误 非法成员初始化 Base 不是基类或成员 为什么 如何调用基类构造函数 include
  • 为什么 FTPWebRequest 或 WebRequest 通常不接受 /../ 路径?

    我正在尝试从 ftp Web 服务器自动执行一些上传 下载任务 当我通过客户端甚至通过 Firefox 连接到服务器时 为了访问我的目录 我必须指定如下路径 ftp ftpserver com AB00000 incoming files
  • 范围和临时初始化列表

    我试图将我认为是纯右值的内容传递到范围适配器闭包对象中 除非我将名称绑定到初始值设定项列表并使其成为左值 否则它不会编译 这里发生了什么 include
  • C# 编译器如何决定发出可重定向的程序集引用?

    NET Compact Framework 引入了可重定向程序集引用 现在用于支持可移植类库 基本上 编译器会发出以下 MSIL assembly extern retargetable mscorlib publickeytoken 7C
  • Silverlight Datagrid:在对列进行排序时突出显示整个列

    我的 Silverlight 应用程序中有一个 DataGrid 我想在对该列进行排序时突出显示整个列 它在概念上与上一个问题类似 Silverlight DataGrid 突出显示整列 https stackoverflow com qu
  • 内核开发和 C++ [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 从我know https stackoverflow com questions 580292 what languages are windo
  • 我应该在应用程序退出之前运行 Dispose 吗?

    我应该在应用程序退出之前运行 Dispose 吗 例如 我创建了许多对象 其中一些对象具有事件订阅 var myObject new MyClass myObject OnEvent OnEventHandle 例如 在我的工作中 我应该使
  • 在基类集合上调用派生方法

    我有一个名为 A 的抽象类 以及实现 A 的其他类 B C D E 我的派生类持有不同类型的值 我还有一个 A 对象的列表 abstract class A class B class A public int val get privat

随机推荐

  • CSS 中的“缩放”有什么作用?

    我发现一些 jQuery 插件在他们的 css 规则中使用了 zoom 描述符 我什至查看了 w3c 网站 发现它是用来放大的 但我该如何实际实现它呢 或者我必须定义一些视口 我如何定义这样的视口 或者我对整个事情都错了 是否可以像这样使用
  • Blowfish 在 Java/Scala 中加密并在 bash 中解密

    我正在尝试构建一个工具来解密在 scala 应用程序中加密的 bash 内容 但首先 我必须成功地用两种语言对相同的消息进行编码并使它们相等 给定密码 0123456789abcdef 十六进制 3031323334353637383961
  • 为什么具有单个组的数据帧 groupby 不返回数据帧?

    我怀疑这是我的问题的更简单形式here https stackoverflow com questions 18518077 why does pandas groupby cut give different form of output
  • std::variant 似乎不适用于 C++ 中的shared_ptr

    通过下面的代码 我得到 In static member function static std shared ptr
  • C++20 内存模型中释放序列定义的更改有何影响?

    考虑这个程序 Initially std atomic
  • Java中如何处理未知的protobuf字段?

    我有一个 Java 应用程序 它从另一台计算机读取一些 protobuf 数据 然后修改一些值并将其写回 用户很可能使用过时的 proto 文件读取数据 因此在这种情况下会有一些字段无法理解 我最终希望在写回所做的更改时保留未知的数据 但是
  • 是否可以反转包含循环的链表?

    我正在看一些面试问题 其中一个要求反转包含循环的链表 所以假设我有一个如下所示的链接列表 F lt E V A gt B gt C gt D 然后反转列表将创建以下内容 F gt E V A lt B lt C lt D 这里的问题是 C
  • 在不破坏寻呼机的情况下获取第一个集合项

    我之前发布了一个关于此问题的问题 但我现在有了更多信息 我认为最好发布一个新问题而不是修改 抱歉 如果这不是正确的协议 你可以找到我原来的问题here https stackoverflow com questions 6311646 ma
  • 警告: array_key_exists() 期望参数 2 为数组,给定布尔值 [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我有下面的代码 它检查数组中是否存在
  • 使用 R 进行快速 url 查询

    您好 必须查询网站 10000 次 我正在寻找一种真正快速的方法来使用 R 来做到这一点 作为模板网址 url lt http mutationassessor org cm var var 7 55178574 G A 我的代码是 url
  • 访问父 DOM 中的 iframe 窗口对象

    我有一个项目 其中有来自其他领域的元素 我正在使用 JavaScript 将第一个 iframe 窗口对象访问到变量中 这是代码 var iframes window frames grab first iframe var ifrWind
  • 本地数据库是否有任何选项,例如用于 j2me - CLDC 设备的 Sqlite?

    本地数据库是否有任何选项 例如用于 j2me CLDC 设备的 Sqlite PerstLite 和 OpenBaseMovil 均享有双重许可 是否有任何开源选项 或者 开发应用程序的任何替代方法 from J2ME中的数据库列表 htt
  • Android 推荐且可靠的 API 用于定期后台工作?

    我一直在使用 WorkManager 为我的应用程序创建通知 就我的目的而言 我认为PeriodicWorkRequest是最合适的 但经过一些测试和在线阅读后 它似乎非常不可靠 使用最小间隔 15 分钟 并关闭应用程序 该工作人员醒来 5
  • ASP.NET Core API 在 React 客户端调用时返回 401

    我正在开发一个带有 React Redux 前端的全新 ASP NET Core 2 1 SPA 应用程序 我已经实施了jwt从 Azure AD B2C 获取其令牌的身份验证 当我分析对后端 API 调用的网络选项卡时 我看到令牌被放置在
  • jQuery - iPad/iPhone - 禁用滚动后启用滚动

    我使用以下方法禁用了 iPad 上的滚动 function disableScrolling document ontouchmove function e e preventDefault 有没有办法简单地再次启用它 这对于以下函数特别有
  • iOS:在导航栏下方添加固定图像

    感觉这应该相当简单 但到目前为止我尝试过的都没有成功 简而言之 我想在我以编程方式创建的 UITableViewController 中的导航栏下方添加一个固定图像 换句话说 我希望图像保持在导航栏的正下方 即使用户在表视图中上下滚动 它基
  • RNGCryptoServiceProvider 已过时

    我需要使用随机数字和字母生成令牌 但是 错误消息告诉我使用 RandomNumberGenerator 它只会给我随机数 这没有帮助 错误信息 RNGCryptoServiceProvider 已过时 RNGCryptoServicePro
  • Scrapy 阿拉伯字母返回一些奇怪的东西

    我在用scrapy关于阿拉伯字母和英文字母 英文字母完美地工作 然而 阿拉伯字母显示如下 gs300 2006 u0644 u0643 u0632 u0633 u062c u064a 有什么帮助吗 我正在使用 python 和 scrapy
  • 如何编写一个程序来通过 Android 设备安装和卸载应用程序?

    我想编写一个程序 可以通过 Android 设备安装和卸载应用程序 由于这些功能是通过 Android 设备提供的 但是我应该从哪里开始以及需要查看哪些文件来开发我自己的应用程序 请帮帮我 提前致谢 Praween 对于这样的安装代码 In
  • 使用委托调用构造函数

    I found this http blogs msdn com haibo luo archive 2005 11 17 494009 aspx但尝试使用它但失败了 如何使用反射创建对象并通过将其放入委托中来使其快速 DynamicMet