Tag: reflection

AddEventHandler使用reflection

我有这段代码不起作用: public CartaoCidadao() { InitializeComponent(); object o = WebDAV.Classes.SCWatcher.LoadAssembly(); MethodInfo method = this.GetType().GetMethod(“Inserted”, BindingFlags.NonPublic | BindingFlags.Instance); EventInfo eventInfo = o.GetType().GetEvent(“CardInserted”); Type type = eventInfo.EventHandlerType; Delegate handler = Delegate.CreateDelegate(type, this , method); eventInfo.AddEventHandler(o, handler); } void Inserted(string readerName, string cardName) { System.Windows.Forms.MessageBox.Show(readerName); } Event CardInserted存在于另一个DLL文件中,对象“o”加载OK。 委托处理程序具有效果后的值。 我只能解雇这个事件。

C#reflection – 加载程序集并调用方法(如果存在)

我想加载一个程序集(它的名称存储在一个字符串中),使用reflection来检查它是否有一个名为“CustomType MyMethod(byte [] a,int b)”的方法并调用它或者抛出exception。 我想我应该做这样的事情,但如果有人可以就如何做到这一点提出相同的建议,我将不胜感激: Assembly asm = Assembly.Load(“myAssembly”); /* 1. does it matter if write myAssembly or myAssembly.dll? */ Type t = asm.GetType(“myAssembly.ClassName”); // specify parameters byte[] a = GetParamA(); int b = GetParamB(); object[] params = new object[2]; params[0] = a; params[1] = b; /* 2. invoke method MyMethod() which returns object […]

在使用类型generics时如何正确地将类强制转换为抽象类?

我有以下课程 public abstract class BaseViewPresenter { } public abstract class BaseView : UserControl where T : BaseViewPresenter { } public class LoginPresenter : BaseViewPresenter { } public partial class LoginView : BaseView { } 我有一个看起来像这样的方法(简化) public BaseView Resolve(BaseViewPresenter model) { var type = model.GetType(); var viewType = _dataTemplates[type]; // Correctly creates BaseView object var control […]

如何使用reflection按名称调用方法

您好我正在尝试使用C#reflection来调用传递参数的方法,并作为回报传递回结果。 我怎样才能做到这一点? 我尝试了几件事但没有成功。 我已经习惯了PHP和Python,这可以在一行上完成,所以这对我来说非常困惑。 实质上,这就是如何在没有reflection的情况下进行调用: response = service.CreateAmbience(request); 请求有以下对象: request.UserId = (long)Constants.defaultAmbience[“UserId”]; request.Ambience.CountryId = (long[])Constants.defaultAmbience[“CountryId”]; request.Ambience.Name.DefaultText = (string)Constants.defaultAmbience[“NameDefaultText”]; request.Ambience.Name.LanguageText = GetCultureTextLanguageText((string)Constants.defaultAmbience[“NameCulture”], (string)Constants.defaultAmbience[“NameText”]); request.Ambience.Description.DefaultText = (string)Constants.defaultAmbience[“DescriptionText”]; request.Ambience.Description.LanguageText = GetCultureTextLanguageText((string)Constants.defaultAmbience[“DescriptionCulture”], (string)Constants.defaultAmbience[“DescriptionDefaultText”]); 这是我实现reflection的函数,其中上面的案例的serviceAction将是“CreateAmbience”: public static R ResponseHelper(T request, String serviceAction) { ICMSCoreContentService service = new ContentServiceRef.CMSCoreContentServiceClient(); R response = default(R); response = ??? }

如何在运行时创建任意Array类型的实例?

我正在尝试在编译时反序列化未知类型的数组。 在运行时我发现了类型,但我不知道如何创建实例。 就像是: Object o = Activator.CreateInstance(type); 这是行不通的,因为没有无参数构造函数,Array似乎没有任何构造函数。

如何列出所有类的变量

有没有办法在C#中列出类的所有变量(字段)。 如果是,可能有人给我一些例子如何将它们保存在List并使用Anonymous Types (var)获取它们。

使用reflection来调用重写的基本方法

如何使用reflection调用被派生类重写的基本方法? class Base { public virtual void Foo() { Console.WriteLine(“Base”); } } class Derived : Base { public override void Foo() { Console.WriteLine(“Derived”); } } public static void Main() { Derived d = new Derived(); typeof(Base).GetMethod(“Foo”).Invoke(d, null); Console.ReadLine(); } 此代码始终显示“派生”…

在不使用GetMethods的情况下获取通用方法

我想得到方法System.Linq.Queryable.OrderyBy(the IQueryable source, Expression<Func> keySelector)方法,但我一直提出空值。 var type = typeof(T); var propertyInfo = type.GetProperty(group.PropertyName); var propertyType = propertyInfo.PropertyType; var sorterType = typeof(Func).MakeGenericType(type, propertyType); var expressionType = typeof(Expression).MakeGenericType(sorterType); var queryType = typeof(IQueryable); var orderBy = typeof(System.Linq.Queryable).GetMethod(“OrderBy”, new[] { queryType, expressionType }); /// is always null. 有没有人有任何见解? 我宁愿不循环GetMethods结果。

如何在运行时加载程序集并创建类实例?

我有一个集会。 在这个程序集中,我有一个类和接口。 我需要在运行时加载这个程序集,并希望创建该类的对象,并且还想使用该接口。 Assembly MyDALL = Assembly.Load(“DALL”); // DALL is name of my dll Type MyLoadClass = MyDALL.GetType(“DALL.LoadClass”); // LoadClass is my class object obj = Activator.CreateInstance(MyLoadClass); 这是我的代码。 怎么可以改进?

如何根据字符串名称实例化一个类?

我有一个抽象类,我想把它推广到一个扩展它的类。 我将子类名称作为字符串。 除此以外… String childClassString; MyAbstractClass myObject; if (childClassString = “myExtenedObjectA”) myObject = new ExtenedObjectA(); if (childClassString = “myExtenedObjectB”) myObject = new ExtenedObjectB(); 我怎样才能做到这一点? 基本上我如何摆脱这里的if语句?