Tag: reflection

使用Type对象创建generics

我正在尝试使用Type对象创建generics类的实例。 基本上,我会在运行时拥有不同类型的对象集合,因为无法确定知道它们究竟属于哪种类型,我想我将不得不使用Reflection。 我正在做的事情如下: Type elType = Type.GetType(obj); Type genType = typeof(GenericType).MakeGenericType(elType); object obj = Activator.CreateInstance(genType); 哪个好,好。 ^ ___ ^ 问题是,我想访问我的GenericType 实例的方法,我不能这样做,因为它被键入为对象类。 我找不到将obj强制转换为特定的GenericType 的方法,因为这首先是问题(即,我不能放入像:)这样的东西 ((GenericType)obj).MyMethod(); 应该怎样解决这个问题? 非常感谢! ^ ___ ^

什么是编程语言的Reflection属性?

它说大多数高级动态类型语言是反身的。 维基百科上的反思(计算机编程)解释说,但它并没有真正给出它的含义。 任何人都可以通过相关的例子以更简单的方式解释它吗?

Type.GetType无法从已加载的程序集创建类型

我有程序使用Asssembly.LoadFrom方法加载程序集。 一段时间后,我尝试使用Type.GetType从该程序集创建一个类型(使用AssemblyQualifiedName ),但该方法返回null 。 如果我将它设置为抛出exception,它会告诉我 无法加载文件或程序集“…”或其依赖项之一。 该系统找不到指定的文件。 但我确信已经加载完全相同的程序集(它显示在AppDomain.CurrentDomain.GetAssemblies()列表中)。 任何人都知道可能出现的问题和/或如何解决这个问题?

从TypeBuilder创建具有基类和附加字段的动态类型会生成exception

我正在尝试基于仅包含公共字段的现有类型创建动态类型。 新的动态类型还必须从仅具有完全实现的方法的不同基类型inheritance。 我创建TypeBuilder指定基类型然后我将公共字段添加到它,最后我调用CreateType() 。 生成的错误消息是: “无法从程序集’MyDynamicAssembly,Version = 0.0.0.0,Culture = neutral,PublicKeyToken = null’加载类型’InternalType’,因为字段’first’未被赋予显式偏移量。” 对我来说,这意味着CreateType方法在基类中寻找公共字段“first”,这是一个问题,因为它不在那里。 为什么它认为添加的字段应该在基类中? 或者,我是否误解了这个例外? 这是代码: public class sourceClass { public Int32 first = 1; public Int32 second = 2; public Int32 third = 3; } public static class MyConvert { public static object ToDynamic(object sourceObject, out Type outType) { // get the public fields […]

在HttpContext.Current.Request中模拟ServerVariables

我的一个服务使用IIS通过此类代码提供的服务器变量 var value = System.Web.HttpContext.Current.Request.ServerVariables[“MY_CUSTOM_VAR”]; 我试过的是模拟那些对象并插入我自己的变量/集合并检查几个案例(例如变量丢失,值为null …)我能够创建HttpContext,HttpRequest,HttpResponse的实例并分配它们但是它们中的每一个都只是一个没有接口或虚拟属性的普通类,ServerVariables的初始化发生在某个地方。 HttpContext嘲笑: var httpRequest = new HttpRequest(“”, “http://excaple.com/”, “”); var stringWriter = new StringWriter(); var httpResponse = new HttpResponse(stringWriter); var httpContextMock = new HttpContext(httpRequest, httpResponse); HttpContext.Current = httpContextMock; 尝试#1通过reflection调用私有方法 var serverVariables = HttpContext.Current.Request.ServerVariables; var serverVariablesType = serverVariables.GetType(); MethodInfo addStaticMethod = serverVariablesType.GetMethod(“AddStatic”, BindingFlags.Instance | BindingFlags.FlattenHierarchy | BindingFlags.NonPublic); addStaticMethod.Invoke(serverVariables, new object[] […]

如何从另一个文件夹中加载的程序集中获取类型?

我使用以下代码: Assembly.LoadFile(“the assembly in another folder”); var type = Type.GetType(“the full name of the type”); 即使程序集已经在这行代码之前加载,它总是在type返回null。 PS:我确实传递了程序集限定名,包括名称空间,类型名称,程序集名称,版本和公共令牌。

如何提供后备程序集而不是无法加载的程序集?

在运行时,如果引用的程序集无法加载,例如“强名称validation失败”(因为它是经过测试签名的),是否有办法从另一个实际签名的路径提供替换程序集? 我尝试订阅AppDomain.CurrentDomain.AssemblyResolve,但它没有被触发,因为“坏”程序集技术上存在,它只是无法加载。 当无法加载程序集时,是否有通用的方法来提供回退程序集?

使用reflection来确定.Net类型在内存中的布局方式

我正在尝试在C#中优化解析器组合器。 当序列化格式与内存格式匹配时,一种可能的优化是仅对要在实例上解析的数据的(不安全)memcpy甚至该类型的许多实例进行解析。 我想编写确定内存中格式是否与序列化格式匹配的代码,以便动态确定是否可以应用优化。 (显然这是一个不安全的优化,可能无法解决一大堆微妙的原因。我只是在尝试,而不是计划在生产代码中使用它。) 我使用属性[StructLayout(LayoutKind.Sequential,Pack = 1)]强制不填充并强制内存顺序匹配声明顺序。 我用reflection检查该属性,但实际上所有这些都证实是“无填充”。 我还需要字段的顺序。 (我非常希望不必为每个字段手动指定FieldOffset属性,因为这很容易出错。) 我假设我可以使用GetFields返回的字段顺序,但文档明确指出订单未指定。 鉴于我使用StructLayout属性强制字段的顺序,有没有办法反映该排序? 编辑我很好,所有字段必须是blittable的限制 。

用Reflection覆盖私有方法

是否可以通过在.NET 3.5中使用Reflection来覆盖私有方法?

设置只读字段(这个错误吗?)

只是玩c#,实现了一件奇怪的事情。 这是代码: class Program { static void Main(string[] args) { System.Diagnostics.Debug.Write(string.Empty); typeof(string) .GetField(“Empty”, BindingFlags.Static | BindingFlags.Public) .SetValue(null, “Tolgahan”); Console.WriteLine(string.Empty); // output : Tolgahan } } 为什么反思让我们改变只读字段? 问题是“为什么允许通过reflection设置”,而不是“如何做”,所以它不是重复我可以使用reflection更改C#中的私有只读字段吗? 。