我需要从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属性?
编辑:
此方法不适用于动态方法. AFAIK与COM Interop一起使用:
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;
解决方法:
在C#属性中,索引器的写法与数组类似.
obj.Prop[enumValue] = 1.2m;