Tag: reflection

实例化一个Internal类并将其作为给定类型进行转换

跟进InternalsVisibleTo 。 我已经看过c#Instantiating内部类与私有构造函数 ,这有帮助,但我试图将返回的对象作为内部类型,并且说实话,我不是100%,这是可能的。 我正在尝试使用Reflection的路径来解决这个问题,但是我正在努力弄清楚如何使用reflection来实现私有方法的内部类型。 我可以去拉类型并获取构造函数并创建一个对象。 如果我想要转换的类型是内部类型,我将如何预先形成对象的强制转换。 public object InitPrivateCoreObjects(string Type) { Assembly Core = Assembly.Load(“Stuff.Core, Version=0.3.3881.21340, Culture=neutral, PublicKeyToken=4fe470e63e2d354e”); Type TypeToReflect = Core.GetType(“Stuff.Core.AssemblyWithIdentifer”); object o = Activator.CreateInstance(TypeToReflect); MethodInfo mi = TypeToReflect.GetMethod(“AssemblyWithIdentifer”); object newObject = mi.Invoke(o,null); //alternatively //ConstructorInfo ctor = TypeToReflect.GetConstructor(new Type[]{TypeToReflect.GetType()}); //ctor.Invoke(newObject, null); return newObject; } 我可以得到内部类的类型, 我可以调用构造函数并实例化该类型的对象。 但是,由于我无法访问内部类型,因此无法对其进行转换并从中进行操作。 我知道我可以使用Reflection.Emit来创建一个基于该类型的新类,但是如果我要走那条路,那么我也可以将我试图访问的项目的全部内容复制到我的测试项目中。 这将是非常浪费和毫无意义的,并且需要我从其他项目中投入一些东西并造成混乱,而这绝对不是我此时想去的路线。 我已经看到访问单个方法和属性的示例,但没有实例化整个类。 我不是100%确定它是可能的,因为在操作顺序中reflection发生在查看访问修饰符之前。 可以这样做,如果是这样,怎么办? 为了求情,我想使用实例化的对象进行测试,而[Assembly:InternalsVisibleTo(“”)]由于我目前正在解决的bug而无法正常工作。 […]

通过reflection查找属性使用计数

我有一个生成的文件,大约有10,000个公共静态属性和方法。 我怀疑它们中的大部分是完全未使用的,但是大约有50个程序集和数百万行代码需要检查以确定。 我想要做的是运行某种实用程序,它可以查看我们拥有的所有已编译的程序集,并告诉我这个类的哪些成员正在被调用,并为每个成员提供计数。 这样的事情是否可以通过reflection,或者我是否需要恢复到实际的代码分析工具? 是否有任何库可以分析程序集以在另一个程序集中找到它们的依赖项?

逗号分隔字符串到通用列表

我能够将逗号分隔的字符串转换为IList但是如何修改它以获取IList ,其中T将作为输入参数之一传递? 即如果我需要IList我将传递“int”作为参数,如果我需要IList我将传递“string”作为参数。 我的想法是通过输入参数获取类型是int还是字符串,并使用reflection并将字符串转换为相应的列表 将逗号分隔的字符串转换为IList public static IList SplitStringUsing(this string source, string seperator =”,”) { return source.Split(Convert.ToChar(seperator)) .Select(x => x.Trim()) .Where(x => !string.IsNullOrWhiteSpace(x)) .Select(int.Parse).ToList(); } 注意:以上代码尚未测试 我正在寻找类似的东西 public static IList SplitStringUsing(this string source, string seperator =”,”, T t) { find the type of t and convert it to respective List }

列出对象属性,如Visual Studio立即窗口

我在会话中存储了几个类。 我希望能够在跟踪查看器中查看我的类属性的值。 默认情况下,我只输入类型名称MyNamespace.MyClass。 我想知道我是否覆盖.ToString()方法并使用reflection来遍历所有属性并构造一个类似的字符串…它会做的伎俩但只是想看看是否有任何东西(特别是立即窗口具有此function)它执行相同的操作…即列出跟踪中的类属性值而不仅仅是类的名称。

C#属性修改方法

所有。 也许我还没有用Google搜索,但我在这个问题上找不到任何例子。 在C#中可以创建一个自定义属性,该属性应用于类修改其所有方法吗? 例如,添加Console.WriteLine(“Hello, i’m modified method”); 作为第一行(如果它在运行时完成,它的IL等价物)?

在私有静态方法的C#中进行unit testing,接受其他私有静态方法作为委托参数

我拥有:我有一个非静态类,其中包含两个私有静态方法:其中一个可以作为委托参数传递给另一个: public class MyClass { … private static string MyMethodToTest(int a, int b, Func myDelegate) { return “result is ” + myDelegate(a, b); } private static int MyDelegateMethod(int a, int b) { return (a + b); } } 我要做的事情:我必须测试(使用unit testing)私有静态方法MyMethodToTest ,并将私有静态方法MyDelegateMethod作为委托参数传递给它。 我能做什么:我知道如何测试私有静态方法,但我不知道如何将同一个类的另一个私有静态方法作为委托参数传递给此方法。 因此,如果我们假设MyMethodToTest方法根本没有第三个参数,那么测试方法将如下所示: using System; using System.Reflection; using Microsoft.VisualStudio.TestTools.UnitTesting; … [TestMethod] public void MyTest() { […]

如何在.Net Framework中为自动属性注入方法

我有一些具有许多属性的类Foo: public class Foo { public int Property1 { get; set; } public int Property2 { get; set; } public int Property3 { get; set; } } 在其他课程中,我有一些方法,例如 public void SomeMethod() { //… } 如何将此方法注入类Foo中的每个属性集? 我使用.Net Framework 2.0

reflection得到FieldInfo对象的类型?

全部,我需要访问声明的类SomeClass在Wrapper类中有一个私有字段,使用Reflection到目前为止我已经能够获得私有字段成员。 如何将其转换回原始类型,以便我可以访问它的属性和其他成员。 internal class Program { private static void Main(string[] args) { Wrapper wrap = new Wrapper { SOmeProperty = new SomeClass { Number = 007 } }; Type type = wrap.GetType(); FieldInfo[] infos = type.GetFields(BindingFlags.NonPublic | BindingFlags.Instance); foreach (var item in infos) { } } } internal class SomeClass { public int Number { […]

当我为类的字段赋值时,添加与特定字段关联的一些元数据?

我有一堂课,我正在用反思做一些漂亮的事情。 现在, 当我使用reflection为类的字段赋值时,我需要添加一些与特定字段关联的元数据 (我不知道该类是什么)。 我想这样做,没有客户对我的实施知道(必须做他们自己的特殊事情)。 在类中具有指定的“元”字段或对象将起作用,但是不会感觉非常优雅,因为它要求子类做一些“兼容”的事情。 我想动态地将这个元信息附加到现有的类,但仍然允许它被视为与应用程序的其余部分相同的类。 我希望以后能够恢复这个元信息。 类被传入 通过附加元信息的reflection来分配(映射)值 class级归来 *此过程在正常操作和类的对象类型方面应该没有副作用。 对于一般应用,该类应该在之前和之后相同。 应用程序对类进行“正常”工作(分配值,获取值,validation信息等)。 类将在稍后传回 使用值和元信息来执行某些操作 细分到最简单的术语,我基本上在寻找一种方法来“回送”任何类实例上的额外信息,而无需特殊的编译时修改。 我意识到这是一个奇怪的问题,有一些奇怪的约束,但可以做到吗?

在运行时使对象不可变

是否有任何方法(利用我希望的reflection),我可以使实例化对象与其所有公共属性一起不可变? 我有一个来自别人的代码库(没有可用的源代码)的类,我需要利用它,如果任何代码片段在实例化之后尝试调用此类中的公共setter,我基本上都希望抛出exception。 注意:我不想在类周围创建一个包装器对象来实现它。 我很懒。