Tag: reflection

如何迭代.net类中的所有“公共字符串”属性

假设我有一些随机的.cs文件,其中包含一个具有各种属性和方法的类。 如何迭代所有这些公共字符串属性的名称(作为字符串)? Example.cs: Public class Example { public string FieldA {get;set;} public string FieldB {get;set;} private string Message1 {get;set;} public int someInt {get;set;} public void Button1_Click(object sender, EventArgs e) { Message1 = “Fields: “; ForEach(string propertyName in this.GetPublicStringProperties()) { Message1 += propertyName + “,”; } // Message1 = “Fields: Field1,Field2” } private string[] GetPublicStringProperties() { […]

当作为方法组调用时,Type.GetType失败但在lambda表达式中没有

以下示例显示Type.GetType在特定方案中失败。 当我在lambda表达式中提供类名字符串(包括命名空间)时,GetType会成功,但是当我将GetType指定为方法组时,会失败。 失败: collectionOfClassNames.Select(GetType) 成功: collectionOfClassNames.Select(s => GetType(s)) 当类路径包含程序集名称时,这两种方法都会成功。 我怀疑它与当前上下文/范围有关,因为上面生成了IL。 我可以看到IL的差异,但我仍然无法解释确切的原因。 以下是演示该问题的可运行示例。 using System; using System.Linq; using System.Reflection; namespace GetTypeTest { public class FindMe{} class Program { static void Main(string[] args) { var assemblyName = Assembly.GetExecutingAssembly().FullName; var className = “GetTypeTest.FindMe”; var classAndAssembly = string.Format(“{0}, {1}”, className, assemblyName); // 1) GetType succeeds when input is “class, […]

通过反思获得活动

我试图通过reflection获取按钮的Click事件,这是我的代码: Assembly assem = Assembly.GetExecutingAssembly(); Type tExForm = btnSave.GetType(); Object exFormAsObj = Activator.CreateInstance(tExForm); EventInfo evClick = tExForm.GetEvent(“Click”); Type tDelegate = evClick.EventHandlerType; MethodInfo miHandler= btnSave.GetType().GetMethod(“Click”, BindingFlags.NonPublic | BindingFlags.Instance); Delegate d = Delegate.CreateDelegate(tDelegate, btnSave, miHandler); MethodInfo addHandler = evClick.GetAddMethod(); Object[] addHandlerArgs = { d }; addHandler.Invoke(exFormAsObj, addHandlerArgs); 但是, miHandler变量始终为null! 注意我关注的主要问题是如何在运行时调用特定控件的事件,有没有办法? 例如,我想选择在用户按F1时触发哪个点击事件。

C#reflection:是否可以在运行时找到对象的实例?

我想知道是否可以使用reflection在运行时定位对象? 这更像是实验而非实际要求。 我在对象实例上使用.GetType()方法对对象做了各种各样的事情,但我的问题是:如果我知道某个类型的对象在运行时存在,但是我不能通过它来引用它名称。 作为一个更具体的例子,假设我有一个加载DLL的WinForms应用程序 – 该DLL如何独立地定位对表单对象的引用以便与表单交互,或者调用公共方法? 这有可能吗?

c#使用reflection从派生类中获取私有成员变量

我有以下结构: abstract class Parent {} class Child : Parent { // Member Variable that I want access to: OleDbCommand[] _commandCollection; // Auto-generated code here } 是否可以使用Parent类中的reflection来访问Child类中的_commandCollection? 如果没有关于如何实现这一点的任何建议? 编辑:可能值得一提的是,在抽象的Parent类中,我计划使用IDbCommand []来处理_commandCollection对象,因为并非所有的TableAdapter都将使用OleDb连接到各自的数据库。 EDIT2:对于所有的评论说…只是将函数的属性添加到子类,我不能像VS Designer自动生成它。 每次我改变设计师的某些东西时,我真的不想重新做我的工作!

如何确定MethodInfo是否是基本方法的覆盖

我试图确定我从类型实例上的GetMethod调用获得的MethodInfo对象是由类型还是由它的基类实现的。 例如: Foo foo = new Foo(); MethodInfo methodInfo = foo.GetType().GetMethod(“ToString”,BindingFlags|Instance); ToString方法可以在Foo类中实现。 我想知道我是否得到了foo实现? 相关问题 是否可以判断派生类中是否已覆盖.NET虚方法?

如何用Reflection + C#获取所有引用

使用System.Reflection,我可以从特定的类中获取所有方法 我需要知道这些方法的参考是什么。 例如:在Visual Studio中,如果需要特定对象的引用 右键单击对象并选择“查找所有引用” Visual Studio显示此选定对象的引用 我想做同样的事情,但是从reflection或其他方式的代码。 我可以这样做吗?

并非所有程序集都从bin文件夹加载到AppDomain中

我有以下方法应该检索加载的本地(在bin文件夹)程序集的列表: static IEnumerable GetLocalAssemblies() { Assembly callingAssembly = Assembly.GetCallingAssembly(); string path = new Uri(Path.GetDirectoryName(callingAssembly.CodeBase)).AbsolutePath; var assemblies = AppDomain.CurrentDomain.GetAssemblies(); return assemblies.Where(x => !x.IsDynamic && new Uri(x.CodeBase).AbsolutePath.Contains(path)).ToList(); } 但是,程序集列表缺少我需要它的几个程序集。 我需要的程序集是管理的(c#.net 4),在项目中引用,并存在于bin文件夹中。 为什么bin文件夹中存在的二进制文件在应用程序启动时不会进入AppDomain?

将字符串转换为变量名称

我有一个XML文件,我有一个节点,我读了所有ChildNodes。 childNode的名称与我必须使用此childNode的值设置的变量匹配。 在循环中,我想设置: myvar1到MyValue1 myvar2到MyValue2 C#代码: protected string myvar1; protected string myvar2; XML内容如下所示: MyValue1 MyValue2 C#设置变量: foreach (var item in xmlParamInstallation.SelectNodes(“parameters”)[0].ChildNodes) { ?????? } 任何的想法 ? 谢谢, 更新1:循环中的值“field”始终为null。 public class ParametersTest { public string myvar1 { get; set; } public string myvar2 {get; set;} } var type = typeof(ParametersTest); foreach (XmlNode item in xmlParamInstallation.SelectNodes(“parameters”)[0].ChildNodes) { […]

如何调用基类中定义的私有COM接口的方法?

如何从派生类调用基类中定义的私有COM接口的方法? 例如,这是COM接口, IComInterface (IDL): [ uuid(9AD16CCE-7588-486C-BC56-F3161FF92EF2), oleautomation ] interface IComInterface: IUnknown { HRESULT ComMethod([in] IUnknown* arg); } 这是来自OldLibrary程序集的C#类BaseClass ,它实现了这样的IComInterface (注意接口被声明为private): // Assembly “OldLibrary” public static class OldLibrary { [ComImport(), Guid(“9AD16CCE-7588-486C-BC56-F3161FF92EF2”)] [InterfaceType(ComInterfaceType.InterfaceIsIUnknown)] private interface IComInterface { void ComMethod([In, MarshalAs(UnmanagedType.Interface)] object arg); } [ComVisible(true)] [ClassInterface(ClassInterfaceType.None)] public class BaseClass : IComInterface { void IComInterface.ComMethod(object arg) { Console.WriteLine(“BaseClass.IComInterface.ComMethod”); } […]