草庐IT

反射面

全部标签

C# 反射 : how to get an array values & length?

FieldInfo[]fields=typeof(MyDictionary).GetFields();MyDictionary是一个静态类,所有字段都是字符串数组。如何获取每个数组的长度值,然后遍历所有元素?我尝试了这样的类型转换:fieldasArray但它会导致错误Cannotconverttype'System.Reflection.FieldInfo'to'System.Array'viaareferenceconversion,boxingconversion,unboxingconversion,wrappingconversion,ornulltypeconversion

c# - C# 中的反射和运算符重载

这是交易。我有一个程序将加载给定的程序集,解析所有类型及其成员并编译一个TreeView(非常类似于旧的MSDN站点),然后为TreeView中的每个节点构建HTML页面。它基本上采用给定的程序集,并允许用户为其创建自己的类似MSDN的库以用于文档目的。这是我遇到的问题:每当在定义的类中遇到运算符重载时,反射都会将其作为“MethodInfo”返回,名称设置为“op_Assign”或“op_Equality”。我希望能够捕获这些并正确列出它们,但我无法在返回的MethodInfo对象中找到任何内容以准确识别我正在查看的运算符。我绝对不想只捕获以“op_”开头的所有内容,因为那肯定(在某

c# - 反射。我们可以使用它实现什么?

我正在阅读和学习C#中的反射。知道它对我的日常工作有什么帮助就很好了,所以我希望比我更有经验的人告诉我一些示例或想法,了解我们可以使用它实现什么样的事情,或者我们如何减少代码量我们写的。谢谢。 最佳答案 我最近用它来为我的枚举中的字段添加自定义属性:publicenumShapeName{//Lines[ShapeDescription(ShapeType.Line,"HorizontalScrollDistance","Thehorizontaldistancetoscrollthebrowserinordertocenterth

C# 反射 - 派生类型中的基类静态字段

在C#中,当我反射(reflect)派生类型时,为什么看不到基类的静态字段?我已经尝试了type.GetFields(BindingFlags.Static)和type.GetFields()。 最佳答案 这就是它的工作原理。static成员实际上是非面向对象的东西。它们不是多态的,它们确实属于它们的声明类型,并且与继承层次结构中的其他类型无关。例如,在访问派生类中的静态成员之前,不需要运行基类的静态初始化程序。除非指定了BindingFlags.FlattenHierarchy,否则不会返回基类的static成员:type.Get

c# - 如何保护我的私有(private)函数免受反射执行?

看到这个之后:Doaccessmodifiersaffectreflectionalso?我试过使用它,但它不起作用:如何防止反射执行我的私有(private)方法? 最佳答案 如果有人目前可以在您的私有(private)方法上使用反射,那么他们已经有足够的访问权限来回避您放置在他们面前的任何其他东西。以较低的信任度运行可能是一种选择,但这只是为了防止诸如插件之类的东西拥有过多的访问权限——它不会阻止具有(比如)管理员访问权限的用户访问该框,他们可以简单地提升访问权限。如果您不希望代码运行,请不要将其放在恶意用户的物理范围内;将其保

c# - 反射(reflect)接口(interface)的所有属性,包括继承的属性?

我有一个表示接口(interface)的System.Type实例,我想获取该接口(interface)上所有属性的列表——包括从基接口(interface)继承的那些。我基本上希望从接口(interface)获得与类相同的行为。例如,给定这个层次结构:publicinterfaceIBase{publicstringBaseProperty{get;}}publicinterfaceISub:IBase{publicstringSubProperty{get;}}publicclassBase:IBase{publicstringBaseProperty{get{return"Bas

c# - 反射生成的类型和泛型

我与Reflection.Emit又经历了一个不愉快的时刻和类型管理。比如说,我有一个名为MyType的类型这是在动态生成的程序集中定义的。打电话MyType.GetMethods()结果NotSupportedException,这让我不得不编写自己的包装器和查找表集。然而,当我调用GetMethods()时,同样的事情发生了。或使用我自己的类型作为泛型参数的标准泛型类型的任何其他自省(introspection)方法:Tuple=>工作正常Tuple=>异常我可以从泛型类型定义中获取方法列表:typeof(Tuple但是,这些方法具有通用占位符而不是实际值(如T1、TResult等

c# - 如何使用反射获取构造函数作为 MethodInfo

构造函数如下所示:publicNameAndValue(stringname,stringvalue)我需要使用反射将其作为MethodInfo获取。它尝试了以下操作,但没有找到构造函数(GetMethod返回null)。MethodInfoconstructor=typeof(NameAndValue).GetMethod(".ctor",new[]{typeof(string),typeof(string)});我做错了什么? 最佳答案 Type.GetConstructor.请注意,这会返回一个ConstructorInfo而

c# - 反射(reflection):如何在 C# 7.0 中查找和调​​用本地函数?

我有一个私有(private)静态泛型方法,我想使用反射调用它,但实际上我想将它“捆绑”到另一个方法中。C#7.0支持本地函数,因此这绝对是可能的。你会说“你为什么不直接调用它呢?”但我正在使用它来获得以强类型方式使用对象和System.Type的能力,因此我需要动态调用它。如果我拥有这段代码,它就已经可以工作了,因为它是自己的私有(private)静态泛型方法。privatestaticvoidHandleResponse(objectdata,TypeasType){varapplication=typeof(Program);application.GetMethod(nameo

c# - 使用 Intellisense 和编译时检查提取属性名称以进行反射

好的。所以我有一些代码将winForm上的某些控件映射到对象中的某些属性,以便在数据发生某些事情时对控件执行某些事情。一切都很好,工作正常。不是问题。问题是,为了将项目添加到映射,我调用了一个如下所示的函数:this.AddMapping(this.myControl,myObject,"myObjectPropertyName");我遇到的问题是,在编译时很难区分上面一行和下面一行之间的区别:this.AddMapping(this.myControl,myObject,"myObjectPropretyName");因为最后一个参数是一个字符串,所以没有编译时检查或任何类似的东西来