草庐IT

反射面

全部标签

c# - 为什么反射可以访问 C# 中类的 protected /私有(private)成员?

C#中为什么反射可以访问类的protected/private成员?这对类(class)来说不安全吗,为什么反射被赋予这样的权力?这是一个anti-pattern? 最佳答案 成员可访问性不是一项安全功能。它用于保护程序员免受他或她自己的伤害。它有助于实现封装,但绝不是安全功能。反射使用起来非常乏味,因此人们通常不会特意使用它来访问非公共(public)成员。它也很慢。反射通常只在特殊情况下使用。然而,没有什么可以完全防止人类的愚蠢,如果有人想滥用反射,他可以很容易地做到,但即使没有反射API,他们也可以实现同样的事情(如果他们在完

c# - 使用反射获取dll中某个基类型的所有类

我有一个dll,其中包含许多类,这些类都继承自CommandBase类。我试图在C#中使用反射获取所有这些类(CommandA、CommandB、CommandC等)的实例,以便我可以对每个类调用特定的方法。这是我目前所拥有的://getassembliesindirectory.stringfolder=Path.Combine(HttpContext.Current.Server.MapPath("~/"),"bin");varfiles=Directory.GetFiles(folder,"*.dll");//loadeachassembly.foreach(stringfile

c# - 使用反射获取dll中某个基类型的所有类

我有一个dll,其中包含许多类,这些类都继承自CommandBase类。我试图在C#中使用反射获取所有这些类(CommandA、CommandB、CommandC等)的实例,以便我可以对每个类调用特定的方法。这是我目前所拥有的://getassembliesindirectory.stringfolder=Path.Combine(HttpContext.Current.Server.MapPath("~/"),"bin");varfiles=Directory.GetFiles(folder,"*.dll");//loadeachassembly.foreach(stringfile

c# - 使用反射调用重写的基方法

如何使用反射调用被派生类覆盖的基方法?classBase{publicvirtualvoidFoo(){Console.WriteLine("Base");}}classDerived:Base{publicoverridevoidFoo(){Console.WriteLine("Derived");}}publicstaticvoidMain(){Derivedd=newDerived();typeof(Base).GetMethod("Foo").Invoke(d,null);Console.ReadLine();}此代码始终显示“派生”... 最佳答案

c# - 使用反射调用重写的基方法

如何使用反射调用被派生类覆盖的基方法?classBase{publicvirtualvoidFoo(){Console.WriteLine("Base");}}classDerived:Base{publicoverridevoidFoo(){Console.WriteLine("Derived");}}publicstaticvoidMain(){Derivedd=newDerived();typeof(Base).GetMethod("Foo").Invoke(d,null);Console.ReadLine();}此代码始终显示“派生”... 最佳答案

c# - 使用反射从类列表的属性中获取值

我正在尝试从作为主对象一部分的列表中的对象获取值。我有一个主对象,其中包含可以是集合的各种属性。现在我正在尝试弄清楚如何访问对象中包含的通用列表。//////Codefortheinnerclass///publicclassTheClass{publicTheClass();stringTheValue{get;set;}}//Notethisclassisusedforserializationsoitwon'tcompileas-is//////Codeforthemainclass///publicclassMainClass{publicMainClass();publicL

c# - 使用反射从类列表的属性中获取值

我正在尝试从作为主对象一部分的列表中的对象获取值。我有一个主对象,其中包含可以是集合的各种属性。现在我正在尝试弄清楚如何访问对象中包含的通用列表。//////Codefortheinnerclass///publicclassTheClass{publicTheClass();stringTheValue{get;set;}}//Notethisclassisusedforserializationsoitwon'tcompileas-is//////Codeforthemainclass///publicclassMainClass{publicMainClass();publicL

c# - .NET 反射 - 如何从 ParameterInfo 中获取 "real"类型

我正在尝试验证参数既是输出参数又是扩展接口(interface)(ICollection)。反射api似乎不想给我参数的“真实”类型,只有最后带有“&”的参数不会在IsAssignableFrom语句中正确评估。我已经编写了一些有效的C#代码,但似乎应该有更好的方法来执行此操作。boolisCachedArg(ParameterInfopInfo){if(!pInfo.IsOut)returnfalse;stringtypeName=pInfo.ParameterType.FullName;stringnameNoAmpersand=typeName.Substring(0,typeN

c# - .NET 反射 - 如何从 ParameterInfo 中获取 "real"类型

我正在尝试验证参数既是输出参数又是扩展接口(interface)(ICollection)。反射api似乎不想给我参数的“真实”类型,只有最后带有“&”的参数不会在IsAssignableFrom语句中正确评估。我已经编写了一些有效的C#代码,但似乎应该有更好的方法来执行此操作。boolisCachedArg(ParameterInfopInfo){if(!pInfo.IsOut)returnfalse;stringtypeName=pInfo.ParameterType.FullName;stringnameNoAmpersand=typeName.Substring(0,typeN

C#使用反射获取params的值

如何获取parms的值(在使用反射的循环中)。在上一个问题中,有人向我展示了如何使用反射遍历参数。staticvoidMain(string[]args){ManyParms("a","b","c",10,20,true,"end");Console.ReadLine();}staticvoidManyParms(stringa,stringb,stringc,intd,shorte,boolf,stringg){varparameters=MethodBase.GetCurrentMethod().GetParameters();foreach(ParameterInfoparame