2012-04-22 36 views
3

让我们看看网格填充的例子。如何序列化委托

我们有类。它有一个委托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委托?

P.S.我知道this question但我的问题是更具体的案件。也许有一个具体的可靠磨合解决方案的这种情况下?

+2

它的支持下,委托对象是二进制序列化。完全不清楚你为什么遇到问题,或者想要使用什么样的序列化,或者你为什么需要它,或者甚至试图使其工作。 – 2012-04-22 11:28:20

回答

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的位于某处的插件组装。