微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

c# – 如何序列化委托

让我们看一下网格填充的例子.

我们有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] 举报,一经查实,本站将立刻删除。

相关推荐