c# - 是否可以创建一个实例并转换回通用接口(interface)类型?

标签 c# generics

我的项目中有以下接口(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/

相关文章:

c# - javascript 更新在第一次异步更新时丢失

c# - 无效的对象名称 'DB'

java - 来自 ListView.getItems().removeAll() 的可疑行为

Java 泛型 - 方法参数和方法返回类型的编译错误

c# - 处理泛型和静态类型之间的交互

java - Name Clash, override fail, on a class 实现两个具有相同删除的接口(interface)

c# - Gmail 错误 :The SMTP server requires a secure connection or the client was not authenticated. 服务器响应为 : 5. 5.1 需要身份验证

c# - 如何在使用 WCF 服务的 WPF 应用程序中集成 LDAP

c# - Linq 中的WhereSelectArrayIterator 是什么?

java - 如何访问通用 ArrayList 的 ArrayList 中的对象