Microsoft.Office.Interop.Word._Document接口(interface)具有带有以下签名的方法:
void Close(ref object SaveChanges = Type.Missing, ref object OriginalFormat = Type.Missing, ref object RouteDocument = Type.Missing);
我在理解上有几点困难:
Type.Missing
不是。 Close(false)
-通常ref参数需要可分配的变量吗? Type
的定义时,它将带我到_Document.Type属性,但是它没有名为Missing
的属性。这是VS中的错误吗? 谢谢您的解释。
最佳答案
这是C#版本4中引入的一个怪癖。它不是COM互操作代码独有的,您也可以在自己的代码中获得它。试试这个:
using System;
using System.Runtime.InteropServices;
class Program {
static void Example([Optional] object arg) { }
static void Main(string[] args) {
Example( // <== Look at the IntelliSense popup here
}
}
触发此行为的是[Optional]属性。永远存在,但以前从未在C#中特别有用。与VB.NET和C++/CLI等其他语言不同。从C#v4开始,它将以不同的方式解释属性,并且编译器将对Type.Missing进行硬编码,作为对象参数类型的可选值。尝试将参数类型更改为字符串,然后注意默认值会有所不同。如您所料,为空。
当然,这不是很漂亮,Type.Missing是普通C#代码中对象的一个相当奇怪的默认值。每个人都会期望null。但是,这非常实用,用C#编写低于4的版本的Office互操作代码是一项相当糟糕的练习。当公司这样做时,公司可能会遇到麻烦,如果Neelie Kroes忍不住了,她将要求微软为此支付10亿欧元的罚款:)
关于c# - 了解COM C#接口(interface),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24693070/