如何序列化委托
本文关键字:序列化 | 更新日期: 2023-09-27 18:31:58
让我们看一个网格填充的例子。
我们有列类。它有一个委托 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 委托?
附言我知道这个问题,但我的问题更具体。也许在这种情况下有一个特定的可靠磨合解决方案?
为什么不直接使用继承?并且不要尝试序列化委托。像这样:
[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的实现位于插件程序集中的某个地方。