Как я могу использовать делегатов для вызова методов стилей? - PullRequest
0 голосов
/ 09 апреля 2010

Мне нужно оформить тонну различных элементов (читай: «ячейки») в PDF с помощью iTextSharp.Метка, заголовок, подзаголовок, номер и т. Д. Сейчас я использую три разных метода для каждого типа ячеек:

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;
    }

Где «По умолчанию» заменяется типом ячейки для каждого набора из трех методов,Я не думаю, что это весы.Особенно, если я получу больше, чем 20 или 30 типов, которые у меня есть сейчас.Что если я захочу изменить не только атрибуты colspan и горизонтального выравнивания? Могу ли я использовать делегатов здесь ?Единственная разница в моих вызовах методов - это имя и вызов GetXFont () внутри метода.

Ответы [ 2 ]

1 голос
/ 09 апреля 2010

Вы можете передать делегат методу, который возвращает шрифт:

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());
0 голосов
/ 09 апреля 2010

Вы, конечно, можете использовать делегатов в вашей ситуации, но вопрос в том, действительно ли это необходимо. Если функция GetDefaultFont возвращает шрифт, который вы хотите использовать в своей ячейке, вы можете просто передать этот шрифт в качестве другого аргумента (т.е. возложить ответственность за его вызов на вызывающую функцию вашего GetXXXCell метода). Передача делегата кажется здесь ненужной абстракцией.

...