Tag: reflection

生成动态方法以设置结构的字段而不是使用reflection

假设我有以下代码使用reflection更新struct的字段。 由于struct实例被复制到DynamicUpdate方法中, 因此需要在传递之前将其装箱到对象 。 struct Person { public int id; } class Test { static void Main() { object person = RuntimeHelpers.GetObjectValue(new Person()); DynamicUpdate(person); Console.WriteLine(((Person)person).id); // print 10 } private static void DynamicUpdate(object o) { FieldInfo field = typeof(Person).GetField(“id”); field.SetValue(o, 10); } } 代码工作正常。 现在,假设我不想使用reflection,因为它很慢。 相反,我想生成一些直接修改id字段的CIL并将该CIL转换为可重用的委托(例如,使用动态方法function)。 特别是,我想用s / t替换上面的代码,如下所示: static void Main() { var action […]

如何确定调用方法和类名?

我目前正在使用内置的TraceListener开发应用程序日志库。 这个库将在许多项目中使用,并且应该提供一个简单的界面,我只需要关心将什么内容写入日志文件,而不是如何。 通过使用reflection命名空间,我可以找出当前称为日志函数的应用程序(检索执行程序集名称),但我还想要调用日志记录函数的函数和类的名称。 假设我有: public static void LogInfo(string vLogText) { Trace.WriteLine( MethodInfo.GetCurrentMethod().Name + this.GetType().ToString() + vLogText); } 当我从另一个项目调用时(类:TestClass,方法:TestMethod) Tracer.LogInfo(“log this!”) 我希望在日志中看到: TestClass, TestMethod, log this! 但相反,我得到了 TracerClass, LogInfo, log this! 如何获取父方法和类名?

在.NET Core中使用Reflection

对于跨平台开发,我正在尝试创建.NET Core共享库。 我在VS 2015中使用了Class Library (package)项目模板。我的库需要在完整的.net 4框架中使用我熟悉的一些reflection机制,但我现在不知道如何在.NET Core中访问它们图书馆。 特别: Delegate类型具有Method属性,该属性返回MethodInfo对象。 Type类有一个BaseType属性, FilterName属性, InvokeMember方法和我在.NET Core中无法访问的FindMembers方法。 我添加了NuGet包,据称有我需要的reflection件: “frameworks”: { “net451”: { “dependencies”: { “System.Reflection”: “4.1.0-beta-23516”, “System.Reflection.Extensions”: “4.0.1-beta-23516”, “System.Reflection.Primitives”: “4.0.1-beta-23516”, } }, “dotnet5.4”: { “dependencies”: { “Microsoft.CSharp”: “4.0.1-beta-23516”, “System.Collections”: “4.0.11-beta-23516”, “System.Linq”: “4.0.1-beta-23516”, “System.Reflection”: “4.1.0-beta-23516”, “System.Reflection.Extensions”: “4.0.1-beta-23516”, “System.Reflection.Primitives”: “4.0.1-beta-23516”, “System.Runtime”: “4.0.21-beta-23516”, “System.Threading”: “4.0.11-beta-23516” } } }, “dependencies”: { “System.Reflection.TypeExtensions”: […]

如何查找方法是否实现特定接口

我有一个方法的MehtodBase,我需要知道该方法是否是特定接口的实现。 所以,如果我有以下课程: class MyClass : IMyInterface { public void SomeMethod(); } 实现界面: interface IMyInterface { void SomeMethod(); } 我希望能够在运行时(使用reflection)发现某个方法是否实现了IMyInterface。

使用PropertyInfo.GetValue()

我有一个类,使用静态构造函数创建所有属性的静态数组。 我还有一个函数 – GetNamesAndTypes() – 它列出了该数组中每个属性的名称和类型。 现在我想创建另一个实例级函数 – GetNamesAndTypesAndValues() – 它显示类中每个属性的名称和类型,以及该实例的值。 我该怎么办? 这是我到目前为止编写的代码: //StaticTest.cs using System; using System.ComponentModel; using System.Globalization; using System.Reflection; namespace StaticTest { public class ClassTest { private string m_A, m_B, m_C; private static PropertyInfo[] allClassProperties; static ClassTest() { Type type = typeof(ClassTest); allClassProperties = type.GetProperties(); // Sort properties alphabetically by name // […]

reflection。 我们可以用它做什么?

我正在阅读和学习C#中的reflection。 很高兴知道它在我的日常工作中如何帮助我,所以我希望有比我更多经验的人告诉我关于我们可以使用它做什么样的事情的样本或想法,或者我们如何减少代码量我们写的。 谢谢。

.NET – 获取通用接口的所有实现?

关于“ 通过reflection实现接口 ”的答案显示了如何获得接口的所有实现。 但是,给定通用接口IInterface ,以下不起作用: var types = TypesImplementingInterface(typeof(IInterface)) 任何人都可以解释我如何修改该方法?

有没有办法在C#中获取内部类的列表?

根据标题。 我想要一个给定类的所有内部类的列表,它可以是一个名称列表或类型列表 – 我不是很好。 这可能吗? 我以为可能有一种方法使用reflection但却找不到reflection。 非常感谢,托马斯

动态添加事件处理程序,在字符串中具有委托名称

我需要以这种方式为对象分配一个eventHandler: _Element.AddHandler(UIElement.MouseLeftButtonUpEvent, new RoutedEventHandler(Vars.Digit), true); 但实际上,我只有一个字符串,其中包含Vars对象实例中的“Digit”或其他方法名称。 使用reflection或其他技巧可以实现这一点吗? 谢谢。

如何设置没有setter的属性值

我已经看到了各种问题并回答了我们可以使用这样的reflection来调用私有的setter: 是否有可能通过反思得到一个房产的私人制定者? 但是我有一些代码有一个我需要设置的属性但不能因为没有setter,我不能添加一个setter,因为这不是我的代码。 在这种情况下,有没有办法以某种方式使用reflection设置值?