gpt4 book ai didi

c# - 如何序列化委托(delegate)

转载 作者:行者123 更新时间:2023-11-30 12:49:58 24 4
gpt4 key购买 nike

让我们看一个网格填充的例子。

我们有类。它有一个委托(delegate)FormatCell,它接受一些数据并将其转换为字符串FormatCell 委托(delegate)在设计时未知 - 它可能由插件设置。

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 委托(delegate)?

附言我知道 this question但我的问题更具体。也许有人有针对这种情况的特定可靠的磨合解决方案?

最佳答案

为什么不直接使用继承呢?而不是尝试序列化委托(delegate)。像这样:

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

关于c# - 如何序列化委托(delegate),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10267388/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com