Type.InvokeMember 方法 (String, BindingFlags, Binder, Object, Object[], ParameterModifier[], CultureInfo, String[])

本文介绍了如何利用Type.InvokeMember方法,在派生类中以特定的绑定约束、参数列表和区域性来调用成员。这个方法在进行类型交互操作时非常有用。
摘要由CSDN通过智能技术生成

当在派生类中重写时,使用指定的绑定约束并匹配指定的参数列表、修饰符和区域性,调用指定成员。

命名空间:System
程序集:mscorlib(在 mscorlib.dll 中)

语法
public abstract Object InvokeMember (
	string name,
	BindingFlags invokeAttr,
	Binder binder,
	Object target,
	Object[] args,
	ParameterModifier[] modifiers,
	CultureInfo culture,
	string[] namedParameters
)
参数
name

String,它包含要调用的构造函数、方法、属性或字段成员的名称。

- 或 -

空字符串 (""),表示调用默认成员。

- 或 -

对于 IDispatch 成员,则为一个表示 DispID 的字符串,例如“[DispID=3]”。

invokeAttr

一个位屏蔽,由一个或多个指定搜索执行方式的 BindingFlags 组成。访问可以是 BindingFlags 之一,如 PublicNonPublicPrivateInvokeMethodGetField 等。不需要指定查找类型。如果省略查找类型,则将应用 BindingFlags.Public |BindingFlags.Instance

binder

一个 Binder 对象,该对象定义一组属性并启用绑定,而绑定可能涉及选择重载方法、强制参数类型和通过反射调用成员。

- 或 -

若为 空引用(在 Visual Basic 中为 Nothing),则使用 DefaultBinder

target

要在其上调用指定成员的 Object

args
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,以下是使用C#代码实现读取Excel表格并判断单元格是否为空的方法,不使用using指令和程序集引用: ```csharp using System; using System.Reflection; using System.Runtime.InteropServices; class Program { static void Main(string[] args) { // 打开Excel应用程序 Type excelType = Type.GetTypeFromProgID("Excel.Application"); object excelObj = Activator.CreateInstance(excelType); // 打开Excel文件 object workbookObj = excelType.InvokeMember("Workbooks", BindingFlags.GetProperty, null, excelObj, null); object[] args1 = { "D:\\test.xlsx" }; object workbook = workbookObj.GetType().InvokeMember("Open", BindingFlags.InvokeMethod, null, workbookObj, args1); // 获取第一个工作表 object sheetsObj = workbook.GetType().InvokeMember("Sheets", BindingFlags.GetProperty, null, workbook, null); object sheet1 = sheetsObj.GetType().InvokeMember("Item", BindingFlags.GetProperty, null, sheetsObj, new object[] { 1 }); // 获取工作表的行数和列数 int rowCount = (int)sheet1.GetType().InvokeMember("UsedRange", BindingFlags.GetProperty, null, sheet1, null).GetType().InvokeMember("Rows", BindingFlags.GetProperty, null, null, null); int columnCount = (int)sheet1.GetType().InvokeMember("UsedRange", BindingFlags.GetProperty, null, sheet1, null).GetType().InvokeMember("Columns", BindingFlags.GetProperty, null, null, null); // 遍历每个单元格 for (int i = 1; i <= rowCount; i++) { for (int j = 1; j <= columnCount; j++) { object cell = sheet1.GetType().InvokeMember("Cells", BindingFlags.GetProperty, null, sheet1, new object[] { i, j }); object value = cell.GetType().InvokeMember("Value", BindingFlags.GetProperty, null, cell, null); if (value == null) { cell.GetType().InvokeMember("Value", BindingFlags.SetProperty, null, cell, new object[] { "单元格为空" }); } } } // 关闭Excel文件并退出Excel应用程序 workbook.GetType().InvokeMember("Close", BindingFlags.InvokeMethod, null, workbook, new object[] { false }); excelType.InvokeMember("Quit", BindingFlags.InvokeMethod, null, excelObj, null); Marshal.ReleaseComObject(sheet1); Marshal.ReleaseComObject(sheetsObj); Marshal.ReleaseComObject(workbook); Marshal.ReleaseComObject(workbookObj); Marshal.ReleaseComObject(excelObj); GC.Collect(); } } ``` 在这段代码中,我们使用了反射的方式来调用Excel应用程序的各种属性和方法,而没有使用using指令和程序集引用。具体实现步骤如下: 1. 使用Type.GetTypeFromProgID方法获取Excel应用程序的类型对象; 2. 使用Activator.CreateInstance方法创建Excel应用程序的实例; 3. 使用Workbooks属性获取Excel文件集合对象,使用InvokeMember方法调用Open方法打开Excel文件; 4. 使用Sheets属性获取工作表集合对象,使用Item属性获取第一个工作表; 5. 使用UsedRange属性获取工作表的使用范围,使用Rows属性和Columns属性获取行数和列数; 6. 使用Cells属性获取单元格对象,使用Value属性获取单元格的值,判断单元格是否为空,如果为空则使用Value属性设置单元格的值为"单元格为空"; 7. 使用Close方法关闭Excel文件,使用Quit方法退出Excel应用程序; 8. 使用Marshal.ReleaseComObject方法释放COM对象,使用GC.Collect方法回收内存。 以上就是使用C#代码实现读取Excel表格并判断单元格是否为空的方法,不使用using指令和程序集引用的完整代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值