5

グリッドの塗りつぶしの例を見てみましょう。

Columnクラスがあります。デリゲートFormatCellがあり、データを受け取って文字列に変換します。FormatCellデリゲートは設計時には不明です。プラグインによって設定されている可能性があります。

public class ColumnFormatter
{
    public Func<Data, string> FormatCell {get; set;}
    //...
}

このような列がどのように使用されるかの例を次に示します。

public class Table
{
    public List<Column> Columns;

    public List<List<string>> BuildTable(List<Data> dataRows)
    {
        var table = new List<List<string>>();

        foreach (var data in dataRows)
        {
            var line = new List<string>();                    
            foreach (var column in Columns)
            {
                line.Add(column.FormatCell(data));
            }

            table.Add(line);
        }

        return table;
    }
}

これで、各列はその状態を保存するはずです。問題は、この FormatCell デリゲートをシリアル化する方法です。

PS私はこの質問を認識していますが、私の質問はより具体的なものです。そして、そのような場合に特定の信頼できる慣らしソリューションを持っているのでしょうか?

4

1 に答える 1

1

継承を使用しないのはなぜですか?デリゲートをシリアル化しようとしないでください。このようなもの:

[Serializable]
public abstract class ColumnFormatterBase
{
    public abstract string FormatCell(Data data);
}

[Serializable]
public class ColumnFormatter1: ColumnFormatterBase
{
    object SerializableProperty1 {get; set;}
    object SerializableProperty2 {get; set;}
    public override string FormatCell(Data data)
    {
        return // formatted result //;
    }
}

ColumnFormatterBase の実装がプラグイン アセンブリのどこかにある場合でも、シリアル化できます。

于 2012-04-22T11:27:48.157 に答える