zhanglei1371 发表于 2021-8-5 09:37

[已解决]C#中对象定义为Object时如何获取属性?

本帖最后由 zhanglei1371 于 2021-8-5 10:33 编辑

vba的语句是这样的:
Dim xlapp as object

xlapp=getObject(,"Excel.application")

msgbox xlapp.name


我在C#里这样写:

Object xlapp;
xlapp = Interaction.GetObject(Class: "Excel.application");
MessageBox.Show(xlapp.Version);



结果就出错了。如下:


我的目的:必须将xlapp定义为object(其他的写法也行,但就是不要写为Excel.application,因为可能是WPS)时,
如何访问其内部的各种对象和方法属性等东西呢?

感谢7楼和8楼的朋友,已完美解决!

Cool_Breeze 发表于 2021-8-5 09:44

需要类型转换

JuncoJet 发表于 2021-8-5 09:59

C#估计需要定义类型把,猜的没用过
VB的话不需要定义类型随便用,脚本语言

逝去的初夏c 发表于 2021-8-5 10:00

emmm,很明显你这个是Obj类型的啊,你怎么能类名.属性调用呢{:1_907:},必须强转啊。

猫吃 发表于 2021-8-5 10:02

你得强制转换你要什么类型就转成什么类型

zhanglei1371 发表于 2021-8-5 10:03

逝去的初夏c 发表于 2021-8-5 10:00
emmm,很明显你这个是Obj类型的啊,你怎么能类名.属性调用呢,必须强转啊。

代码怎么写呢?能同时适用于wps的情况?

BestTime 发表于 2021-8-5 10:19

本帖最后由 BestTime 于 2021-8-5 10:24 编辑

Object xlapp;
xlapp = Interaction.GetObject(Class: "Excel.application");
if(xlapp is Excel.application app)
{
    MessageBox.Show(app.Version);
}

a952135763 发表于 2021-8-5 10:19

本帖最后由 a952135763 于 2021-8-4 23:24 编辑

有引入application就封箱转换一下
var xlapp = (application)Interaction.GetObject(Class: "Excel.application");
没有引入application就这样
dynamic xlapp = Interaction.GetObject(Class: "Excel.application");

使用dynamic 可以直接访问 你 application有的属性和方法,但是没有智能提示

luoye1997 发表于 2021-8-5 10:56

楼主真棒,感谢大佬
页: [1]
查看完整版本: [已解决]C#中对象定义为Object时如何获取属性?