我的项目中有以下接口(interface)和类
public interface IProcessor<T> : where T:IGenericData
{
void Process(T data);
}
public class CompanyADataProcessor : IProcessor<CompanyAData>
{
void Process(CompanyAData Data);
}
CompanyAData 实现 IGenericData。
我想实现下面的类型转换,有可能吗?
(IProcessor<IGenericData>)Activator.CreateInstance(typeof(CompanyADataProcessor));
更新
我想我完全清楚为什么这行不通。我想我需要改变我的设计来解决我当前的问题。
基本上,我目前的问题是我们有一个数据文件处理器,每个客户端都有不同的数据模式,一些客户端数据在保存到我们的数据库之前需要额外清理、重新格式化等,这就是我开始的原因之一单独的处理器类来处理特定的客户端数据。
目前的逻辑是首先从配置自定义部分启动所有的处理器,因此,如果我们有一个新的客户端有不同的数据,我们可以很容易地创建一个新的处理器,把dll扔到bin文件夹而不用重启应用程序。
<Processors>
<add name="CompanyA" type="CompanyA.ThreeStepProcessor,CompanyA.Processor" outputPath="../../Output/CompanyA"/>
.....
</Processors>
最佳答案
不,这不可能。如果是,那么您可以将该接口(interface)引用传递给其他代码,它们可以传递 IGenericData
的任意实现的实例。给你的CompanyADataProcessor
类(class)的Process()
方法,当它显然只需要 CompanyAData
时要提供的实例。
C# 支持变体通用接口(interface),但即使使用该语法也只允许在另一个方向进行转换,即转换为 IProcessor<CompanyAData>
来自 IProcessor<IGenericData>
,而不是相反。鉴于您展示的界面,这是类型安全的唯一方向。
关于c# - 是否可以创建一个实例并转换回通用接口(interface)类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28988692/