3

我需要从 vb6 对象获取和设置带有参数的属性:

Property Prop(ByVal type As SomeEnum) As Currency

这就是我创建对象实例的方式:

dynamic obj = Activator.CreateInstance(Type.GetTypeFromProgID(progID));

我在 c# 中尝试了 vb6 语法,但它不起作用(甚至无法编译):

obj.Prop(enumValue) = 1.2m;

所以问题是:如何从 c# 获取和设置带有参数的 vb6 属性?

编辑:

此方法不适用于dynamic. AFAIK 它适用于 COM 互操作:

obj.get_Prop(enumValue);
obj.set_Prop(enumValue, newValue);

反射方法工作得很好,但它太冗长了:

obj.GetType().InvokeMember("Prop", System.Reflection.BindingFlags.Public |
    System.Reflection.BindingFlags.SetProperty, null, obj,
    new object[] { enumValue, 1.2m });

属性索引器方法也适用:

obj.Prop[enumValue] = 1.2m;
4

2 回答 2

3

在 C# 中,属性索引器像数组一样编写。

obj.Prop[enumValue] = 1.2m;
于 2012-04-27T18:50:08.020 回答
0

我对此不是 100% 确定,但我相信 VB6 COM 对象中的属性实际上已转换为 C# 中的方法。

所以一个 Property Get 将是 obj.get_Prop(); 一个属性集是 obj.set_Prop(newValue);

于 2012-04-26T16:20:58.713 回答