情况:
我正在寻找一个框架,我将在其中处理数据。数据紧缩的输出将是一个字符串(我的程序的大部分需要)。我将使用其他人制作的Data Crunchers。
我有一个如下所示的界面:
public interface IDataCruncher {
string Execute( ICruncherInput input );
}
问题:
由于每个DataCruncher的执行方式不同并需要不同的输入,我已经使用dictionary<string, object>
传递信息,但是打包/解包过程实现起来很繁琐,并且对于打包材料而言编译安全性不高(你可能会拼错一个字典键,或者忘记一个字典键,导致数据处理器崩溃)。
public interface ICruncherInput {
Dictionary<string, object> Data { get; }
}
问题:
是否可以将数据传递到Data Cruncher实现,并且编译时安全,或者至少比从对象中转换更安全?
有没有办法在代码中定义这些密钥合约? (而不是假设字典将包含我需要的密钥,并在代码之外的文档中定义密钥)
答案 0 :(得分:2)
看看dynamic type,这应该会给你一些更健壮的(运行时)编译器安全的东西。
或者你可以使用这样的通用类型:
public interface ICruncherInput <T> {
Dictionary<string, T> Data { get; }
}
可以这样实现:
public CruncherInput : ICruncherInput<YourObject>
{
Dictionary<string, YourObject> Data { get; }
}
答案 1 :(得分:2)
我将数据传递给类的常用方法是将其传递给构造函数。由于构造函数不是接口的一部分,因此实现相同接口的不同类可以具有不同的构造函数签名。
但是因为它没有用,如果你没有通过默认构造函数实例化类。
IDataCruncher cruncher1 = new DataCruncherA(x, y, z);
IDataCruncher cruncher2 = new ExcelDataCruncher(pathOfExcelFile);
IDataCruncher cruncher3 = new SampleDataCruncher();
因为它是完全类型安全的,如果传递了错误的参数将无法编译。