2017-04-11 78 views
1

我想从DocX继承,整合Word文档的互操作打印:“DOCX”不包含一个构造函数0参数

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

    static WordDoc() { 
    } 
} 

但是当我尝试,我得到这个错误:

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

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

我确实有静态构造函数,但是当我删除它时,仍然会得到相同的错误。你正试图从继承

+0

“从元数据我可以看到,没有构造函数是在所有定义的,所以我认为空构造应被生成“。不,如果编译器会生成任何默认构造函数*,那么元数据中就会有这样的构造函数。 –

+0

你有链接到DocX的任何文档吗? –

+0

@JonSkeet https://docx.codeplex.com/ –

回答

1

如果你看一下source code,你会看到一个构造函数确实宣称:

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

尽管如此,考虑到它标记为internal,它似乎是这个类是意成为公共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; 
} 
+0

@BartFriederichs哎呀,我绝对做到了,谢谢你:)。更新。 –

1

类有一个内部构造:

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

所以你不能从该类继承。如果省略默认的构造函数,编译器会产生这样的:

public WordDoc() : base() { 

} 

base()构造函数是无法访问的(内部)。如果您创建默认构造函数:

public WordDoc() { 

} 

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

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

相关问题