gpt4 book ai didi

c# - 了解 COM c# 接口(interface)

转载 作者:太空狗 更新时间:2023-10-29 21:27:36 25 4
gpt4 key购买 nike

Microsoft.Office.Interop.Word._Document 接口(interface)有一个具有以下签名的方法:

void Close(ref object SaveChanges = Type.Missing, ref object OriginalFormat = Type.Missing, ref object RouteDocument = Type.Missing);

我难以理解的几点:

  1. ref 参数不能有默认值。
  2. 默认值必须是常量,而 Type.Missing 不是。
  3. 调用此方法时,我可以使用 Close(false) - 通常 ref 参数需要一个可分配的变量?
  4. 在 Visual Studio 中导航到 Type 的定义时,它会将我带到 _Document.Type 属性,但它没有名为 Missing 的属性。这是 VS 中的错误吗?

感谢您的任何解释。

最佳答案

问题是,InterOp 库实际上并不是用 C# 编写的,也不必符合 C# 的规则。唯一需要的是有效的 IL。

Visual Studio 元数据查看器会尽力以您选择的语言(在本例中为 C#)显示元数据,因为它通常比使用 IL 代码更具可读性。

这在某些情况下可能会产生误导(例如,ref 参数在 C# 中实际上不必是 ref,C# 之前的默认参数有默认参数,默认参数中的非常量值...),但这实际上只是 VS 并不真正知道用于构建库的语言这一事实​​的副作用,即使它知道,你也不会希望看到这一点 - 您关心在 C# 中向您公开的接口(interface),或者尽可能接近它的东西。

请注意,这些默认参数实际上与 C# 的工作方式完全不同 - C# 在编译时在客户端解析(例如,更改引用库中的默认参数不会更改用户代码中的它们,直到您也重新编译该代码),这些不是。正如我所说,VS 会尽力近似,但 CLR 语言确实可能非常不同。

关于c# - 了解 COM c# 接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24693070/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com