|
项目中要用到动态调用类的方法,去网上找了点代码,总算是弄明白了,不过传参数有点麻烦,这里差个master类,未注释的代码都经过测试了,注释的部分摘自互联网!在此记录方便自己以后查找 using System; public partial class _Default : System.Web.UI.Page //调用无返回的无参数的方法 MemberInfo[] menbers = t.GetMembers();
////设置属性值 //type.InvokeMember("Name", BindingFlags.SetProperty, null, obj, new string[] { "abc" }); ////获取属性值 //string str = (string)type.InvokeMember("Name", BindingFlags.GetProperty, null, obj, null); //Console.WriteLine(str);
////设置字段值 //type.InvokeMember("field1", BindingFlags.SetField, null, obj, new object[] { 444 });
////获取字段值 //int f = (int)type.InvokeMember("field1", BindingFlags.GetField, null, obj, null); //InvokeMember方法参数 //name //invokeAttr //binder //target //args //modifiers //culture //namedParameters //返回值 // 备注 //当调用 IDispatch 成员时,可以使用字符串格式“[DispID=##]”指定 DispID 而非成员名称。例如,如果 MyComMethod 的 DispID 为 3,则可以指定字符串“[DispID=3]”而不是“MyComMethod”。按 DispID 调用成员比按名称查找成员快。在复杂的聚合方案中,DispID 有时是调用所需成员的唯一方式。 //尽管默认的联编程序不处理 ParameterModifier 或 CultureInfo(modifiers 和 culture 参数),您仍然可以使用抽象 System.Reflection.Binder 类编写会处理 modifiers 和 culture 的自定义联编程序。仅当通过 COM interop 进行调用时才使用 ParameterModifier,并且仅处理通过引用传递的参数。 //args 数组和 modifiers 数组的长度相同。args 数组中指定的参数可具有下列在 modifiers 数组中指定的属性 (Attribute):pdIn、pdOut、pdLcid、pdRetval、pdOptional 和 pdHasDefault,它们分别表示 [In]、[Out]、[lcid]、[retval]、[optional] 和一个指定参数是否有默认值的值。参数的关联属性 (Attribute) 存储在元数据中并且增强了交互操作。 //namedParameters 数组中的每一个参数获取 args 数组中相应元素中的值。如果 args 的长度大于 namedParameters 的长度,则按顺序传递剩余的参数值。 //下列 BindingFlags 筛选标志可用于定义包含在搜索中的成员: //为了获取返回值,必须指定 BindingFlags.Instance 或 BindingFlags.Static。 //指定 BindingFlags.Public 可在搜索中包含公共成员。 //指定 BindingFlags.NonPublic 可在搜索中包含非公共成员(即私有成员和受保护的成员)。 //指定 BindingFlags.FlattenHierarchy 可包含层次结构上的静态成员。 //下列 BindingFlags 修饰符标志可用于更改搜索的执行方式: //BindingFlags.IgnoreCase,表示忽略 name 的大小写。 //BindingFlags.DeclaredOnly,仅搜索 Type 上声明的成员,而不搜索被简单继承的成员。 //可以使用下列 BindingFlags 调用标志表示要对成员采取的操作: //CreateInstance,表示调用构造函数。忽略 name。对其他调用标志无效。 //InvokeMethod,表示调用方法,而不调用构造函数或类型初始值设定项。对 SetField 或 SetProperty 无效。 //GetField,表示获取字段值。对 SetField 无效。 //SetField,表示设置字段值。对 GetField 无效。 //GetProperty,表示获取属性。对 SetProperty 无效。 //SetProperty 表示设置属性。对 GetProperty 无效。 (责任编辑:admin) |





骆驼户外男 真皮磨砂日常休闲鞋 低帮 2011秋冬新款 专柜正品特价