'DocX'不包含带0参数的构造函数

时间:2017-04-11 14:52:27

标签: c# novacode-docx

我想继承DocX,以整合Word文档的InterOp打印:

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

    static WordDoc() {
    }
}

但是当我尝试这个时,我收到了这个错误:

  

'DocX'不包含带0参数的构造函数

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

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

2 个答案:

答案 0 :(得分:1)

您尝试继承的类有一个内部构造函数:

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

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

public WordDoc() : base() {

}

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

public WordDoc() {

}

编译器仍会添加对base()的调用,因为你不能从类继承并以某种方式省略调用任何这个基类构造函数。

因此,取决于继承 - 使用其他方式,例如扩展方法,代理类等,具体取决于您正在解决的具体问题。

答案 1 :(得分:1)

如果查看source code,您将看到确实声明了构造函数:

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

那就是说,考虑到它被标记为internal,似乎这个类 NOT 意图是公共API,因此,你不应该尝试直接实例化它或继承它。

相反,所有examples似乎都依赖于该类中的静态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;
}