让我们看一下网格填充的例子.
我们有Column类.它有一个委托FormatCell,它接受一些数据并将其转换为字符串. FormatCell委托在设计时是未知的 – 它可能由插件设置.
@H_404_11@public class ColumnFormatter { public Func<Data,string> FormatCell {get; set;} //... }以下是如何使用此类列的示例.
@H_404_11@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委托?
附:我知道this question,但我的问题更具体案例.对于这种情况,也许有一个特定的可靠的磨合解决方案?
解决方法
为什么不直接使用继承?而不是尝试序列化委托.像这样的东西:
@H_404_11@[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的实现位于插件程序集中的某个位置.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。