C# .NET是否为DISPID预定义了常量值?

C# .NET是否为DISPID预定义了常量值?,c#,.net,com,interop,C#,.net,Com,Interop,可以向使用COM对象的任何人传递某些值,这些值赋予特定的含义 e、 g 典型的建议似乎是只硬编码任何一个“魔法数字”适合你的目的。但是由于.NET包含了DispIdAttribute,我本来希望有一个常量列表,但一直没有找到。这样的事情存在吗? 对于记录,我所说的DispId值是: DISPID_COLLECT -8 DISPID_CONSTRUCTOR -6 DISPID_DESTRUCTOR -7 DISPID_EVALUATE

可以向使用COM对象的任何人传递某些值,这些值赋予特定的含义

e、 g

典型的建议似乎是只硬编码任何一个“魔法数字”适合你的目的。但是由于.NET包含了
DispIdAttribute
,我本来希望有一个常量列表,但一直没有找到。这样的事情存在吗?

对于记录,我所说的DispId值是:

DISPID_COLLECT         -8    
DISPID_CONSTRUCTOR     -6    
DISPID_DESTRUCTOR      -7    
DISPID_EVALUATE        -5     
DISPID_NEWENUM         -4    
DISPID_PROPERTYPUT     -3    
DISPID_UNKNOWN         -1    
DISPID_VALUE            0

ref

我刚刚使用.NET Reflector在.NET framework中的所有程序集中搜索“dispid”。似乎没有公开这些标准dispid的公共常量或枚举。有两个内部类--
System.Dynamic.ComDispIds
System.Windows.Forms.NativeMethods+ActiveX
--它们公开了这些常量,但你不可能不经过思考就得到它们。

如果我还记得我以前的VB6时代,我很确定这些值也是神奇的数字:/我几乎肯定没有。即使是链接中的MSDN示例也只使用纯整数文字,其中只有两个预期会被客户端应用程序使用。DISPID#u值表示索引器的默认属性,用C#表示。DISPID_NEWENUM表示迭代器,在C语言中,当您实现IEnumerator时,会自动获得它。这些赋值是自动的,无需使用[DispId],因此框架中没有相应的声明