1

情况:

我正在寻找一个框架,我将在其中处理数据。数据紧缩的输出将是一个字符串(我的大部分程序都需要它)。我将使用其他人制作的数据处理器。

我有一个看起来像这样的界面:

public interface IDataCruncher {
    string Execute( ICruncherInput input );
}

问题:

由于每个 DataCruncher 的执行方式不同并且需要不同的输入,因此我采用了将信息传递为 as 的方法dictionary<string, object>,但是打包/解包过程实施起来很繁琐,并且对于打包材料而言编译不安全(您可能拼错字典键,或者忘记一个,导致数据处理器崩溃)。

public interface ICruncherInput {
    Dictionary<string, object> Data { get; }
}

问题:

是否可以在编译时安全的情况下将数据传递给 Data Cruncher 实现,或者至少比从对象强制转换更安全?

有没有办法在代码中定义这些关键合约?(而不是假设字典将包含我需要的键,并在代码之外的文档中定义键)

4

2 回答 2

2

看看动态类型,它应该给你一些更健壮和(运行时)编译器安全的东西。

或者您可以使用这样的泛型类型:

public interface ICruncherInput <T> {
    Dictionary<string, T> Data { get; }
}

可以这样实现:

public CruncherInput : ICruncherInput<YourObject>
{
    Dictionary<string, YourObject> Data { get; }
}
于 2012-08-07T20:51:16.633 回答
2

我将数据传递给类的常用方法是将其传递给构造函数。由于构造函数不是接口的一部分,因此实现相同接口的不同类可以具有不同的构造函数签名。

但是,只有在您不通过默认构造函数实例化类时,它才有效。

IDataCruncher cruncher1 = new DataCruncherA(x, y, z);
IDataCruncher cruncher2 = new ExcelDataCruncher(pathOfExcelFile);
IDataCruncher cruncher3 = new SampleDataCruncher();

当然,它是完全类型安全的,如果传递了错误的参数,将不会编译。

于 2012-08-07T20:54:50.120 回答