Tag: reflection

如何获取基类的generics类型参数?

我有三节课如下: public class TestEntity { } public class BaseClass { } public class DerivedClass : BaseClass { } 我已经在运行时使用reflection获取了DerivedClass的System.Type对象。 如何使用reflection获取TestEntity的System.Type对象? 谢谢。

如何获取堆栈帧的执行对象?

使用reflection时,可以使用System.Diagnostics.StackTrace获取调用堆栈(除了它可以是由JIT优化引起的粗略近似)并检查包含的StackFrame对象。 如何获取对堆栈帧中的方法正在执行的对象(this-pointer)的引用? 我知道我可以通过在堆栈框架对象上调用GetMethod()来获取MethodBase,但我正在寻找的东西是GetObject()(如果方法是静态的话,它会自然地返回null)。 看起来堆栈帧对象只能查询静态确定的信息,例如方法信息,原始文件等。 VS调试器知道(尽管它可能使用另一种获取调用堆栈跟踪的方法),因为可以双击调用堆栈窗口中的任何堆栈帧并查看本地和类字段的值。 编辑:澄清:我想要调用该方法的对象实例 。 即:如果在调用堆栈的某个地方的对象实例A上调用方法Foo(),并且它级联到我执行堆栈跟踪的方法,我想从我执行堆栈跟踪的位置获取对A的引用。 (不是方法库的声明类型)

在运行时创建类型“MyClass:OtherClass {}”?

在C#中是否可以在运行时创建一个inheritance自generics类的类型,其中基类的模板参数是正在构造的当前类? 这将编译正常: // I have this class: public class OtherClass where T : OtherClass { } // I want to create this at runtime: public class MyClass : OtherClass { } 但我不知道如何使用System.Reflection.Emit.ModuleBuilder.TypeBuilder创建MyClass : AssemblyName asn = new AssemblyName(“test.dll”); AssemblyBuilder asb = AppDomain.CurrentDomain.DefineDynamicAssembly( asn, AssemblyBuilderAccess.RunAndSave, @”D:\test_assemblies”); ModuleBuilder = modb = asb.DefineDynamicModule(“test”, “test.dll”); TypeBuilder tb = modb.DefineType( […]

PropertyInfo.GetValue() – 如何使用C#中的reflection索引到generics参数?

这个(缩短的)代码.. for (int i = 0; i < count; i++) { object obj = propertyInfo.GetValue(Tcurrent, new object[] { i }); } ..正在抛出’TargetParameterCountException:参数计数不匹配’exception。 ‘propertyInfo’的基础类型是一些T的集合。’count’是集合中的项目数。 我需要遍历集合并对obj执行操作。 建议表示赞赏。

如何从引用程序集中的静态类获取字段及其值

我在一个名为“A7”的refrenced程序集(名为“DAL” )中有一个静态类: A7是这样的: public static class A7 { public static readonly bool NeedCoding = false; public static readonly string Title = “Desc_Title” public static readonly string F0 = “”; public static readonly string F1 = “Desc_F1”; public static readonly string F2 = “Desc_F2”; public static readonly string F3 = “Desc_F3”; public static readonly string F4 […]

C#4.0“动态”关键字是否会使generics多余?

我对C#中的动态特性感到非常兴奋( C#4动态关键字 – 为什么不呢? ),特别是因为在我的代码的某些库部分我使用了很多reflection。 我的问题有两个: 1.“动态”取代generics,如下所示? generics方法: public static void Do_Something_If_Object_Not_Null(SomeType ObjToTest) { //test object is not null, regardless of its Type if (!EqualityComparer.Default.Equals(ObjToTest, default(SomeType))) { //do something } } 动态方法(??): public static void Do_Something_If_Object_Not_Null(dynamic ObjToTest) { //test object is not null, regardless of its Type?? but how? if (ObjToTest != null) { //do […]

如何在c#中迭代内部属性

public class TestClass { public string property1 { get; set; } public string property2 { get; set; } internal string property3 { get; set; } internal string property4 { get; set; } internal string property5 { get; set; } } 我可以使用以下循环遍历属性,但它只显示公共属性。 我需要所有的属性。 foreach (PropertyInfo property in typeof(TestClass).GetProperties()) { //do something }

从StackFrame获取Type T.

目标是基于调用my方法的类型创建一个通用实例。 问题是,当从generics调用时,StackFrame似乎只包含开放定义类型参数而不是封闭定义类型参数。 如何从StackFrame获取类型参数? 与此问题类似。 我想我的情况是不同的,因为Log.Debug是从一个封闭的方法调用的。 如果StackFrame不是正确的方法,除IoC以外的任何建议? 此代码用于填写对我的Unity容器的引用不可用的情况。 using System; using System.Reflection; namespace ReflectionTest { public class Logger { private readonly string loggerName; protected Logger(string loggerName) { this.loggerName = loggerName; } public void Debug(string message) { Console.WriteLine(string.Format(“{0} – {1}”, loggerName, message)); } } public class Logger : Logger { public Logger() : base(typeof(T).FullName) { } } […]

没有从GetType()获取字段。使用BindingFlag.Default获取GetFields

我正在使用Reflection类来获取某个对象中的所有字段。 然而,我的问题是,当字段在普通类中时,它可以正常工作,例如: class test { string test1 = string.Empty; string test2 = string.Empty; } 在这里我得到test1和test2,我的问题是我使用抽象,因此结合了几个类。 我有类似的东西: class test3 : test2 { string test4 = string.Empty; string test5 = string.Empty; } class test2 : test1 { string test2 = string.Empty; string test3 = string.Empty; } class test1 { string test0 = string.Empty; string test1 = string.Empty; […]

为什么typeof(Object )。Name等于“Object ”?

评估typeof(Object[,][]).Name给出Object[][,] 类似地, typeof(Object[][,]).Name给出Object[,][] 好像逗号正在无缘无故地移动。 是什么赋予了?