使用委托调用构造函数

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(使用前将#替换为@)

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

  • 没有强命名的代码签名是否会让您的应用程序容易被滥用?

    尝试了解authenticode代码签名和强命名 我是否正确地认为 如果我对引用一些 dll 非强命名 的 exe 进行代码签名 恶意用户就可以替换我的 DLL 并以看似由我签名但正在运行的方式分发应用程序他们的代码 假设这是真的 那么您似
  • 我如何才能等待多个事情

    我正在使用 C 11 和 stl 线程编写一个线程安全队列 WaitAndPop 方法当前如下所示 我希望能够将一些内容传递给 WaitAndPop 来指示调用线程是否已被要求停止 如果 WaitAndPop 等待并返回队列的元素 则应返回
  • 通过 CMIS (dotCMIS) 连接到 SP2010:异常未经授权

    我正在使用 dotCMIS 并且想要简单连接到我的 SP2010 服务器 我尝试用 C 来做到这一点 如下所示http chemistry apache org dotnet getting started with dotcmis htm
  • “构建”构建我的项目,“构建解决方案”则不构建

    我刚刚开始使用VS2010 我有一个较大的解决方案 已从 VS2008 成功迁移 我已将一个名为 Test 的控制台应用程序项目添加到解决方案中 选择构建 gt 构建解决方案不编译新项目 选择构建 gt 构建测试确实构建了项目 在失败的情况
  • 为什么 C# Array.BinarySearch 这么快?

    我已经实施了一个很简单用于在整数数组中查找整数的 C 中的 binarySearch 实现 二分查找 static int binarySearch int arr int i int low 0 high arr Length 1 mid
  • 在结构中使用 typedef 枚举并避免类型混合警告

    我正在使用 C99 我的编译器是 IAR Embedded workbench 但我认为这个问题对于其他一些编译器也有效 我有一个 typedef 枚举 其中包含一些项目 并且我向该新类型的结构添加了一个元素 typedef enum fo
  • 查找c中结构元素的偏移量

    struct a struct b int i float j x struct c int k float l y z 谁能解释一下如何找到偏移量int k这样我们就可以找到地址int i Use offsetof 找到从开始处的偏移量z
  • Asp.NET WebApi 中类似文件名称的路由

    是否可以在 ASP NET Web API 路由配置中添加一条路由 以允许处理看起来有点像文件名的 URL 我尝试添加以下条目WebApiConfig Register 但这不起作用 使用 URIapi foo 0de7ebfa 3a55
  • 如何使用 ICU 解析汉字数字字符?

    我正在编写一个使用 ICU 来解析由汉字数字字符组成的 Unicode 字符串的函数 并希望返回该字符串的整数值 五 gt 5 三十一 gt 31 五千九百七十二 gt 5972 我将区域设置设置为 Locale getJapan 并使用
  • HTTPWebResponse 响应字符串被截断

    应用程序正在与 REST 服务通信 Fiddler 显示作为 Apps 响应传入的完整良好 XML 响应 该应用程序位于法属波利尼西亚 在新西兰也有一个相同的副本 因此主要嫌疑人似乎在编码 但我们已经检查过 但空手而归 查看流读取器的输出字
  • OleDbDataAdapter 未填充所有行

    嘿 我正在使用 DataAdapter 读取 Excel 文件并用该数据填充数据表 这是我的查询和连接字符串 private string Query SELECT FROM Sheet1 private string ConnectStr
  • 堆栈溢出:堆栈空间中重复的临时分配?

    struct MemBlock char mem 1024 MemBlock operator const MemBlock b const return MemBlock global void foo int step 0 if ste
  • 在 ASP.NET 5 中使用 DI 调用构造函数时解决依赖关系

    Web 上似乎充斥着如何在 ASP NET 5 中使用 DI 的示例 但没有一个示例显示如何调用构造函数并解决依赖关系 以下只是众多案例之一 http social technet microsoft com wiki contents a
  • 显示UnityWebRequest的进度

    我正在尝试使用下载 assetbundle统一网络请求 https docs unity3d com ScriptReference Networking UnityWebRequest GetAssetBundle html并显示进度 根
  • 如何在 C 中调用采用匿名结构的函数?

    如何在 C 中调用采用匿名结构的函数 比如这个函数 void func struct int x p printf i n p x 当提供原型的函数声明在范围内时 调用该函数的参数必须具有与原型中声明的类型兼容的类型 其中 兼容 具有标准定
  • 链接器错误:已定义

    我尝试在 Microsoft Visual Studio 2012 中编译我的 Visual C 项目 使用 MFC 但出现以下错误 error LNK2005 void cdecl operator new unsigned int 2
  • WPF/C# 将自定义对象列表数据绑定到列表框?

    我在将自定义对象列表的数据绑定到ListBox in WPF 这是自定义对象 public class FileItem public string Name get set public string Path get set 这是列表
  • 基于 OpenCV 边缘的物体检测 C++

    我有一个应用程序 我必须检测场景中某些项目的存在 这些项目可以旋转并稍微缩放 更大或更小 我尝试过使用关键点检测器 但它们不够快且不够准确 因此 我决定首先使用 Canny 或更快的边缘检测算法 检测模板和搜索区域中的边缘 然后匹配边缘以查
  • 混合 ExecutionContext.SuppressFlow 和任务时 AsyncLocal.Value 出现意外值

    在应用程序中 由于 AsyncLocal 的错误 意外值 我遇到了奇怪的行为 尽管我抑制了执行上下文的流程 但 AsyncLocal Value 属性有时不会在新生成的任务的执行范围内重置 下面我创建了一个最小的可重现示例来演示该问题 pr
  • 如何防止用户控件表单在 C# 中处理键盘输入(箭头键)

    我的用户控件包含其他可以选择的控件 我想实现使用箭头键导航子控件的方法 问题是家长控制拦截箭头键并使用它来滚动其视图什么是我想避免的事情 我想自己解决控制内容的导航问题 我如何控制由箭头键引起的标准行为 提前致谢 MTH 这通常是通过重写

随机推荐

  • 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