我需要使用iTextSharp在PDF中设置大量不同的元素(读取:“单元格”)。标签,标题,副标题,数字等。现在,我对每种细胞类型使用三种不同的方法:
public static PdfPCell GetDefaultCell(string strText)
{
PdfPCell cell = new PdfPCell(new Phrase(strText, GetDefaultFont()));
cell.Border = 0;
return cell;
}
public static PdfPCell GetDefaultCell(string strText, int iColspan)
{
PdfPCell cell = new PdfPCell(new Phrase(strText, GetDefaultFont()));
cell.Border = 0;
cell.Colspan = iColspan;
return cell;
}
public static PdfPCell GetDefaultCell(string strText, int iColspan, int iAlign)
{
PdfPCell cell = new PdfPCell(new Phrase(strText, GetDefaultFont()));
cell.Border = 0;
cell.Colspan = iColspan;
cell.HorizontalAlignment = iAlign;
return cell;
}
其中“Default”替换为每组三种方法的单元格类型。我认为这不会扩大。特别是如果我最终得到超过现在的20或30种类型。如果我想修改的不仅仅是colspan和horizontalalignment属性,该怎么办? 我可以在这里使用代表吗?我的方法调用的唯一区别是名称和方法中的GetXFont()调用。
答案 0 :(得分:1)
您可以将委托传递给返回字体的方法:
public static PdfPCell GetCell(string strText, Func<Font> fontCreator)
{
PdfPCell cell = new PdfPCell(new Phrase(strText, fontCreator()));
cell.Border = 0;
return cell;
}
var cell = GetCell("...", () => GetDefaultFont());
但为什么不直接将字体传递给方法?
public static PdfPCell GetCell(string strText, Font font)
{
PdfPCell cell = new PdfPCell(new Phrase(strText, font));
cell.Border = 0;
return cell;
}
var cell = GetCell("...", GetDefaultFont());
答案 1 :(得分:0)
你当然可以在你的情况下使用代表,但问题是它是否真的有必要。如果函数GetDefaultFont
返回要在单元格中使用的字体,则可以简单地将此字体作为另一个参数传递(即将调用它的责任交给GetXXXCell
方法的调用者)。在这里传递委托似乎是一种不必要的抽象。