'DocX' 不包含采用 0 个参数的构造函数

'DocX' does not contain a constructor that takes 0 arguments

我想继承DocX,集成Word文档的InterOp打印:

public class WordDoc : DocX {
    static private Microsoft.Office.Interop.Word.Application wordApp;

    static WordDoc() {
    }
}

但是当我尝试这样做时,出现了这个错误:

'DocX' does not contain a constructor that takes 0 arguments

从元数据中我可以看到根本没有定义构造函数,所以我认为应该生成空的构造函数。我也没有为我的基础 class.

提供构造函数

我确实有静态构造函数,但是当我删除它时,我仍然得到同样的错误。

Class 您尝试继承的有一个 internal 构造函数:

internal DocX(DocX document, XElement xml)
  : base(document, xml)
{
}

所以你不能继承这个class。如果省略默认构造函数,编译器将生成:

public WordDoc() : base() {

}

但是 base() 构造函数不可访问(内部)。如果创建默认构造函数:

public WordDoc() {

}

编译器仍将添加对 base() 的调用,因为您不能从 class 继承并以某种方式忽略调用任何此基础 class 构造函数。

所以不要继承 - 使用其他方式,例如扩展方法、代理 class 等等,具体取决于您要解决的具体问题。

如果你查看 source code,你会看到确实声明了一个构造函数:

internal DocX(DocX document, XElement xml)
        : base(document, xml)
{
}

也就是说,考虑到它被标记为 internal,这 class 似乎是 NOT public API 因此,您不应尝试直接实例化它或继承它。

相反,所有 examples 似乎都依赖于 class:

中的静态 Create 方法
public static DocX Create(string filename, 
    DocumentTypes documentType = DocumentTypes.Document)
{
    // Store this document in memory
    MemoryStream ms = new MemoryStream();

    // Create the docx package
    //WordprocessingDocument wdDoc = WordprocessingDocument.Create(ms, 
        DocumentFormat.OpenXml.WordprocessingDocumentType.Document);
    Package package = Package.Open(ms, FileMode.Create, FileAccess.ReadWrite);

    PostCreation(package, documentType);
    DocX document = DocX.Load(ms);
    document.filename = filename;
    return document;
}