如何在C#中为特定方法创建包装类

本文关键字:方法 创建 包装类 | 更新日期: 2023-09-27 17:57:39

我需要为包含以下代码的类创建一个包装器。

PDDocument pdfDoc = PDDocument.load("C:''Users''Pictures''Fillable.pdf");
PDDocumentCatalog docCatalog = pdfDoc.getDocumentCatalog();
PDAcroForm acroForm = docCatalog.getAcroForm();
PDField field = acroForm.getField("last");
field.setValue("c#");
pdfDoc.save("C:''Users''Pictures''Fillable.pdf");
pdfDoc.close(); 

我已经创建了两个包装器类,但我对接下来的步骤有点困惑。

public class c_PDFdocu
{
    private PDDocument PD;
    public c_PDFdocu(string PDFPath)
    {
        PD = PDDocument.load(PDFPath);
    }
    public c_documentcatalog getDocumentCatalog()
    {
        return new c_documentcatalog(PD);
    }
}
public class c_documentcatalog
{
    private PDDocumentCatalog PDFDocCat;
    public c_documentcatalog(PDDocument PDFDoc)
    {
        PDFDocCat = PDFDoc.getDocumentCatalog();
    }
    public c_PDAcroForm getAcroForm()
    {
        return new c_PDAcroForm(PDFDocCat);
    }
}  

public class c_PDAcroForm
{
    private PDAcroForm acroForm;
    public c_PDAcroForm(PDDocumentCatalog docCatalog)
    {
        acroForm = docCatalog.getAcroForm();
    }
}

如何为剩下的语句创建包装类?

我需要将该值传递到getField中。它的用户视角类似于setvalue。它属于同一个变量名field

感谢

如何在C#中为特定方法创建包装类

您要做的实际上是创建一个"Facade"。Facade(或包装器)本质上是一些代码,它接受困难、挑剔的代码,并使其更易于使用。

在您的情况下,创建一个构造函数获取您需要的信息(例如路径)然后创建的类更有意义。它在类本身内部完成所有困难的工作。例如:

class PDFdoc
{
   String path;
   PDDocument pdfDoc;
   PDDocumentCatalog docCatalog; 
   PDAcroForm acroForm; 
   PDField field;
   public PDFdoc(String path)
   {
      this.path = path;
      this.pdfDoc = PDDocument.load(path);
      this.docCatalog = pdfDoc.getDocumentCatalog();
      this.acroForm = docCatalog.getAcroForm();
      this.field = acroForm.getField("last");
      this.field.setValue("c#");
   }
   public Save()
   {
      this.pdfDoc.save(path);
   }
   public Close()
   {
      this.pdfDoc.close();
   }
}

现在,当您想要保存时,只需调用PDFdoc.SavePDFDoc.close,它就会为您处理所有工作。重点是,Facade通过将一个类封装("包装")在另一个类中,并使用一个更易于使用的接口来隐藏关于该类如何工作的所有困难细节。