如何用DispId装饰属性(get和set都没有?)

时间:2015-07-20 12:58:45

标签: c# com

   [DispId(8)]
    DateTime MaxDate { [DispId(8)] get; [DispId(8)] set; }

^ get和set有不同的DispIds,因为它们有两个不同的功能吗?或者我应该只装饰一次方法名称?

谢谢,

1 个答案:

答案 0 :(得分:4)

不,属性应该只有一个[DispId],应用于属性声明。客户端代码通过在IDispatch::Invoke()调用中为wFlags参数传递DISPATCH_PROPERTYGET或DISPATCH_PROPERTYPUT来指示是否要调用getter或setter。

在getter和setter上重复[DispId]并不是完全错误的,并且Tlbexp.exe支持这一点,以这种方式做这件事并没有多大意义。使用不同的 dispid在技术上是可行的,但几乎可以保证使客户端代码失败,因为它不会期望。