我想继承DocX
,以整合Word文档的InterOp打印:
public class WordDoc : DocX {
static private Microsoft.Office.Interop.Word.Application wordApp;
static WordDoc() {
}
}
但是当我尝试这个时,我收到了这个错误:
'DocX'不包含带0参数的构造函数
从元数据我可以看到根本没有定义构造函数,所以我认为应该生成空构造函数。我也没有为我的基类提供构造函数。
我确实有静态构造函数,但是当我删除它时,我仍然会得到同样的错误。
答案 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;
}