加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 如何序列化委托

发布时间:2020-12-15 21:33:22 所属栏目:百科 来源:网络整理
导读:让我们看一下网格填充的例子. 我们有Column类.它有一个委托FormatCell,它接受一些数据并将其转换为字符串. FormatCell委托在设计时是未知的 – 它可能由插件设置. public class ColumnFormatter{ public FuncData,string FormatCell {get; set;} //...} 以下
让我们看一下网格填充的例子.

我们有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委托?

附:我知道this question,但我的问题更具体案例.对于这种情况,也许有一个特定的可靠的磨合解决方案?

解决方法

为什么不直接使用继承?而不是尝试序列化委托.像这样的东西:

[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的实现位于插件程序集中的某个位置.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读