草庐IT

反射机制

全部标签

c# - 如何使用反射调用带有 ref/out 参数的方法

假设我有以下类(class):classCow{publicstaticboolTryParse(strings,outCowcow){...}}是否可以通过反射调用TryParse?我知道基础知识:vartype=typeof(Cow);vartryParse=type.GetMethod("TryParse");vartoParse="...";varresult=(bool)tryParse.Invoke(null,/*whataretheargs?*/); 最佳答案 你可以这样做:staticvoidMain(string[

c# - 如何使用反射获取泛型类型的扩展方法

从互联网上的各种来源,我收集了以下功能:publicstaticNullableTryParseNullable(thisNullablet,stringinput)whereT:struct{if(string.IsNullOrEmpty(input))returndefault(T);Nullableresult=newNullable();try{IConvertibleconvertibleString=(IConvertible)input;result=newNullable((T)convertibleString.ToType(typeof(T),CultureInfo

c# - 使用反射确定 .Net 类型在内存中的布局方式

我正在尝试用C#优化解析器组合器。当序列化格式与内存中格式匹配时,一种可能的优化是只对要在该类型的一个实例或什至多个实例上解析的数据执行(不安全的)memcpy。我想编写代码来确定内存格式是否与序列化格式匹配,以便动态确定是否可以应用优化。(显然,这是一个不安全的优化,可能由于一大堆微妙的原因而无法工作。我只是在试验,不打算在生产代码中使用它。)我使用属性[StructLayout(LayoutKind.Sequential,Pack=1)]强制不填充并强制内存中的顺序与声明顺序匹配。我用反射检查该属性,但实际上所有这些都确认是“无填充”。我还需要字段的顺序。(我强烈希望不必为每个字段

c# - 如何正确转换通过反射创建的对象

我正试图全神贯注于反射,所以我决定将插件功能添加到我正在编写的程序中。理解一个概念的唯一方法就是动手写代码,所以我创建了一个简单的接口(interface)库,其中包含IPlugin和IHost接口(interface),一个实现IPlugin的类的插件实现库,以及一个简单的实例化IHost实现类的控制台项目,该类对插件对象进行简单的工作。使用反射,我想遍历我的插件实现dll中包含的类型并创建类型的实例。我能够使用此代码成功实例化类,但无法将创建的对象转换为接口(interface)。我尝试了这段代码,但无法按预期转换对象o。我使用调试器逐步完成了整个过程,并调用了正确的构造函数。快速

c# - (自动)依赖注入(inject)绑定(bind)机制

创建依赖项注入(inject)绑定(bind)的两种常见机制(例如通过IOC容器)来自XML配置或命令式代码块。在这些情况下,键值对是显式的(即键=请求的类型,值=返回的类型)。仍然存在第三种“启发式”方法,其中仅向应用程序/IOC容器提供[IMyClass]键,然后容器反射(reflect)一组应用程序程序集依赖项以找到所有名称匹配的具体类[MyClass]。换句话说,“返回类型”值是发现的而不是声明的。我想知道的有两个方面:哪些IOC容器(或其他后期绑定(bind)工具)允许启发式方法?这种方法有更通用的名称吗?除了我列出的三种绑定(bind)技术外,还有其他用于实践的绑定(bin

c# - 反射 - 带参数调用构造函数

例如,我从加载的程序集中读取类型:varsomeType=loadedAssemblies.Where(a=>a!=null&&a.FullName.StartsWith("MY.")).SelectMany(a=>a.GetTypes()).Distinct().ToArray()[0];如果counstructor有参数,我可以读取它们:ParameterInfo[]parameters=classType.GetConstructors()[0].GetParameters();我想使用默认参数值调用构造函数,或者如果参数是枚举,则使用第一个枚举值。如果只有一个参数,并且是枚举,

c# - 使用反射来确定哪些字段是属性的支持字段

我正在使用反射来映射对象。这些对象在托管代码中,但除了通过反射之外,我看不到它们的源代码、底层结构等。所有这一切的首要目标是一个对象的基本内存映射(在功能上类似于SOS.dllDumpObject和!ObjSize命令)。因此,我试图确定哪些成员被“重复计算”为字段和属性。例如:publicclassCalendarEntry{//privatepropertyprivateDateTimedate{get;set;}//publicfieldpublicstringday="DAY";}当映射显示时:字段天k__BackingField属性日期像这样的类在哪里:publicclass

c# - MSYS/Cygwin 使用什么机制来模拟 Unix 域套接字?

我正在尝试编写(在C#中)一个软件,该软件通过(MSYS模拟的)Unix域套接字与另一个使用MSYS构建的软件进行通信。我了解到“套接字服务器”(我不清楚正确的术语是什么)会创建一个临时文件,其内容如下:!59108282F93E1-9E2D051A-46B57EFC-64A1852F59108对应于一个TCP端口,“套接字服务器”正在环回接口(interface)上监听该端口。使用数据包捕获工具,我已经能够确定“套接字客户端”连接到此端口,并通过环回接口(interface)交换信息。我在我的软件中复制了这个行为,“套接字客户端”连接到我的监听端口,但没有传输任何信息。我相信这里还有

c# - 使用 Control+Plus 的快捷方式创建 MenuItem – 使用反射修改 MenuItem 的私有(private)字段是最好的方法吗?

我正在使用旧版MainMenucontrol(withMenuItems)controlinanapplication,andwouldliketoimplementzoominandzoomoutmenuitems(withControl++和Control+-键盘快捷键)。(请注意,我使用的是MainMenu而不是MenuStrip)。MenuItem确实有一个Shortcut属性,类型Shortcut,但它没有CtrlPlus选项。我决定看看如何Shortcutwasimplementedinthereferencesource,看起来每个枚举值只是几个Keys的组合枚举值(例如

c# - C#中通过反射创建匿名对象

有没有办法在.NET3.5运行时通过反射创建C#3.0匿名对象?我想在我的序列化方案中支持它们,因此我需要一种以编程方式操作它们的方法。稍后进行编辑以阐明用例一个额外的限制是我将在Silverlight应用程序中运行所有这些,因此额外的运行时不是一个选项,并且不确定动态生成代码将如何工作。 最佳答案 这是另一种方式,似乎更直接。objectanon=Activator.CreateInstance(existingObject.GetType()); 关于c#-C#中通过反射创建匿名对象