为什么需要在c#中使用DispId注释?

IAd*_*ter 15 .net c# visual-studio

例如

public interface IWMPSettings

        [DispId(101)]
        bool autoStart { get; set; }
        [DispId(102)]
        int balance { get; set; }
Run Code Online (Sandbox Code Playgroud)

它是有用的还是只是为编译器自动生成的?什么是COM调度标识符以及何时在.NET上下文中需要它们?

Ric*_*lly 15

简而言之,它是有用的,但仅适用于COM发送:

DispIdAttribute(来自MSDN):

指定方法,字段或属性的COM调度标识符(DISPID).

此属性包含其描述的方法,字段或属性的DISPID.唯一的DISPID通常由公共语言运行库分配,但您可以使用此属性为方法分配特定的DISPID.导入类型库时,此属性将应用于具有已分配DISPID的所有方法.这可确保同一方法的任何托管实现在暴露给COM时保留相同的DISPID.

  • @IAdapter如果您的类型是COM可见,并且您希望通过COM代码(而不是.Net)调用它们,那么您*可能*需要使用此属性.它不会影响从.Net调用这些方法的任何代码,因此,如果您的代码都是.Net,则该属性是多余的. (4认同)
  • 这是遵循上述某些内容的正确方法吗:基本上,如果您要在同一个程序集、同一个类等中采用每个方法、属性和字段并仅实现一次,这是在 VB6 中使用 COM 或其他任何方式来访问它时,*甚至* 是不必要的。但是,如果您要采用一个方法、字段或属性并在不同的 dll 中实现它或执行其他类似操作(可能手动支持不同的平台,可能将旧代码移植到更新的语言等),*那么*当这真的派上用场时,因为它将保持相同的身份。 (2认同)
  • @Panzercrisis我同意你的意见,我不认为这真的回答了问题的意图(认为它是严格意义上的......当这些DispID有用时它不会传达) (2认同)