100分求:用什么函数能把一个字符串转化为一个函数 比如我在DLL里写了一个函数TextBox_click(,);然后想在程序里通过字符串的方式来调用这个函数。如想把"TextBox_click(5,6)"这个字符串作为函数来运行,不知可以用什么函数,请知道的大虾能指点一下 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 Try search "反射" anywhere. 你可以使用InvokeMember,参看ms-help://MS.MSDNQTR.2003APR.1033/cpref/html/frlrfsystemtypeclassinvokemembertopic1.htm 使用反射,加载dll,然后根据方法名获取MethodInfo,接着使用参数调用即可 参看http://blog.csdn.net/knight94/archive/2006/04/10/657527.aspx //调用方法示例 int obj = 100; String s = (String) t.InvokeMember("ToString", //方法名 BindingFlags.DeclaredOnly | BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.InvokeMethod, null, obj, null); Console.WriteLine("ToString: " + s); Type.InvokeMember 方法 (String, BindingFlags, Binder, Object, Object[])请参见Type 类 | Type 成员 | System 命名空间 | Type.InvokeMember 重载列表 | String | Binder | DefaultBinder | BindingFlags | ParameterModifier | ParameterAttributes | CultureInfo | ReflectionPermission | Type 成员(Visual J# 语法) | C++ 托管扩展编程 要求平台: Windows 98, Windows NT 4.0, Windows ME, Windows 2000, Windows XP Home Edition, Windows XP Professional, Windows Server 2003 系列, .NET Framework 精简版 - Windows CE .NET, 公共语言基础结构 (CLI) 标准.NET Framework 安全性: ReflectionPermission。关联的枚举:ReflectionPermissionFlag.MemberAccess SecurityPermission。关联的枚举:SecurityPermissionFlag.UnmanagedCode 语言C#C++JScriptVisual Basic全部显示使用指定的绑定约束并匹配指定的参数列表,调用指定成员。[Visual Basic]Overloads Public Function InvokeMember( _ ByVal name As String, _ ByVal invokeAttr As BindingFlags, _ ByVal binder As Binder, _ ByVal target As Object, _ ByVal args() As Object _) As Object[C#]public object InvokeMember( string name, BindingFlags invokeAttr, Binder binder, object target, object[] args);[C++]public: Object* InvokeMember( String* name, BindingFlags invokeAttr, Binder* binder, Object* target, Object* args __gc[]);[JScript]public function InvokeMember( name : String, invokeAttr : BindingFlags, binder : Binder, target : Object, args : Object[]) : Object;参数name String,它包含要调用的构造函数、方法、属性或字段成员的名称。 - 或 - 空字符串 (""),表示调用默认成员。 invokeAttr 一个位屏蔽,由一个或多个指定搜索执行方式的 BindingFlags 组成。访问可以是 BindingFlags 之一,如 Public、NonPublic、Private、InvokeMethod 和 GetField 等。不需要指定查找类型。如果省略查找类型,则将应用 BindingFlags.Public | BindingFlags.Instance。 binder 一个 Binder 对象,该对象定义一组属性并启用绑定,而绑定可能涉及选择重载方法、强制参数类型和通过反射调用成员。 - 或 - 若为空引用(Visual Basic 中为 Nothing),则使用 DefaultBinder。 target 要在其上调用指定成员的 Object。 args 包含传递给要调用的成员的参数的数组。 返回值表示被调用成员的返回值的 Object。下列 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 无效。 有关更多信息,请参见 System.Reflection.BindingFlags。如果下列条件为真,则将调用方法: 方法声明中的参数个数等于 args 数组中的参数个数(除非在成员上定义了默认参数)。并且 每个参数的类型可以被联编程序转换为参数类型。 联编程序将查找所有的匹配方法。查找这些方法时基于所请求的绑定类型(BindingFlags 值 InvokeMethod、GetProperty 等)。方法集按名称、参数数目、联编程序中定义的一组搜索修饰符进行筛选。选择方法后,方法即被调用。同时检查可访问性。搜索可能基于与此方法关联的可访问性特性来控制搜索哪些方法集。Binder 类的 Binder.BindToMethod 方法负责选择要调用的方法。默认联编程序选择最精确的匹配。对于完全受信任的代码将忽略访问限制;即,只要代码是完全受信任的,就可以通过 System.Reflection 访问和调用私有的构造函数、方法、字段和属性。通过指定 BindingFlags.SetField,可以用 Type.InvokeMember 将字段设置为特殊值。例如,如果要设置 C 类上名为 F 的公共实例字段,并且 F 为 String,则可使用下列代码:typeof(C).InvokeMember("F", BindingFlags.SetField, null, C, new Object{"stringsnew value"}); 如果 F 为 String[],则可使用下列代码:typeof(C).InvokeMember("F", BindingFlags.SetField, null, C,new Object{new String[]{"a","z","c","d"}); 这会将字段 F 初始化为此新数组。还可用 Type.InvokeMember 设置数组中的某个位置(通过提供值索引),然后通过使用下列代码设置下一个值:typeof(C).InvokeMember("F", BindingFlags.SetField, null, C, new Object{1, "b"}); 这会将 F 在数组中所占据的字符串“z”更改为字符串“b”。 新手跪问 找不到类型或命名空间名称“ExcelOperate” 如何打开浏览器,并导航到一个网址,刷新完毕后,关闭 请教一个C#修改xml文档的问题 弹出窗口 请问哪位大侠知道ZedGraph这个开源图表组件,用键盘上下键控制显示的图片缩小和放大呢? 控件拖上去总提示:呈现控件时出错,以下是原代码,高手帮忙看看哪里出问题了 ==========如何找出同一个字段中,不一样内容的所有记录? 关于ASCII码和汉字转换的问题! C#中数据库连接一只出问题.. sos,如何像VB一样模式显示窗体呢 WinForm 报表 怎么样给所有网页添加同一个元素
ms-help://MS.MSDNQTR.2003APR.1033/cpref/html/frlrfsystemtypeclassinvokemembertopic1.htm
http://blog.csdn.net/knight94/archive/2006/04/10/657527.aspx
int obj = 100;
String s = (String) t.InvokeMember("ToString", //方法名
BindingFlags.DeclaredOnly |
BindingFlags.Public | BindingFlags.NonPublic |
BindingFlags.Instance | BindingFlags.InvokeMethod, null, obj, null);
Console.WriteLine("ToString: " + s);
Type 类 | Type 成员 | System 命名空间 | Type.InvokeMember 重载列表 | String | Binder | DefaultBinder | BindingFlags | ParameterModifier | ParameterAttributes | CultureInfo | ReflectionPermission | Type 成员(Visual J# 语法) | C++ 托管扩展编程
要求
平台: Windows 98, Windows NT 4.0, Windows ME, Windows 2000, Windows XP Home Edition, Windows XP Professional, Windows Server 2003 系列, .NET Framework 精简版 - Windows CE .NET, 公共语言基础结构 (CLI) 标准.NET Framework 安全性: ReflectionPermission。关联的枚举:ReflectionPermissionFlag.MemberAccess
SecurityPermission。关联的枚举:SecurityPermissionFlag.UnmanagedCode
语言
C#C++JScriptVisual Basic全部显示
使用指定的绑定约束并匹配指定的参数列表,调用指定成员。[Visual Basic]
Overloads Public Function InvokeMember( _
ByVal name As String, _
ByVal invokeAttr As BindingFlags, _
ByVal binder As Binder, _
ByVal target As Object, _
ByVal args() As Object _
) As Object[C#]
public object InvokeMember(
string name,
BindingFlags invokeAttr,
Binder binder,
object target,
object[] args
);[C++]
public: Object* InvokeMember(
String* name,
BindingFlags invokeAttr,
Binder* binder,
Object* target,
Object* args __gc[]
);[JScript]
public function InvokeMember(
name : String,
invokeAttr : BindingFlags,
binder : Binder,
target : Object,
args : Object[]
) : Object;参数
name
String,它包含要调用的构造函数、方法、属性或字段成员的名称。
- 或 - 空字符串 (""),表示调用默认成员。 invokeAttr
一个位屏蔽,由一个或多个指定搜索执行方式的 BindingFlags 组成。访问可以是 BindingFlags 之一,如 Public、NonPublic、Private、InvokeMethod 和 GetField 等。不需要指定查找类型。如果省略查找类型,则将应用 BindingFlags.Public | BindingFlags.Instance。
binder
一个 Binder 对象,该对象定义一组属性并启用绑定,而绑定可能涉及选择重载方法、强制参数类型和通过反射调用成员。
- 或 - 若为空引用(Visual Basic 中为 Nothing),则使用 DefaultBinder。 target
要在其上调用指定成员的 Object。
args
包含传递给要调用的成员的参数的数组。
返回值
表示被调用成员的返回值的 Object。
下列 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 无效。
有关更多信息,请参见 System.Reflection.BindingFlags。如果下列条件为真,则将调用方法: 方法声明中的参数个数等于 args 数组中的参数个数(除非在成员上定义了默认参数)。并且
每个参数的类型可以被联编程序转换为参数类型。
联编程序将查找所有的匹配方法。查找这些方法时基于所请求的绑定类型(BindingFlags 值 InvokeMethod、GetProperty 等)。方法集按名称、参数数目、联编程序中定义的一组搜索修饰符进行筛选。选择方法后,方法即被调用。同时检查可访问性。搜索可能基于与此方法关联的可访问性特性来控制搜索哪些方法集。Binder 类的 Binder.BindToMethod 方法负责选择要调用的方法。默认联编程序选择最精确的匹配。对于完全受信任的代码将忽略访问限制;即,只要代码是完全受信任的,就可以通过 System.Reflection 访问和调用私有的构造函数、方法、字段和属性。通过指定 BindingFlags.SetField,可以用 Type.InvokeMember 将字段设置为特殊值。例如,如果要设置 C 类上名为 F 的公共实例字段,并且 F 为 String,则可使用下列代码:typeof(C).InvokeMember("F", BindingFlags.SetField, null, C, new Object{"stringsnew value"}); 如果 F 为 String[],则可使用下列代码:typeof(C).InvokeMember("F", BindingFlags.SetField, null, C,new Object{new String[]{"a","z","c","d"}); 这会将字段 F 初始化为此新数组。还可用 Type.InvokeMember 设置数组中的某个位置(通过提供值索引),然后通过使用下列代码设置下一个值:typeof(C).InvokeMember("F", BindingFlags.SetField, null, C, new Object{1, "b"}); 这会将 F 在数组中所占据的字符串“z”更改为字符串“b”。