Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/304.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何初始化具有另一个接口类型aguments的接口_C# - Fatal编程技术网

C# 如何初始化具有另一个接口类型aguments的接口

C# 如何初始化具有另一个接口类型aguments的接口,c#,C#,我遇到了一个问题——这是我的班级结构 public interface IModel{} public interface IGenericMapper<T> where T : IModel {...} public class ActualModel:IModel {...} public class ActualMapper: IGenericMapper<ActualModel> {...} 显然,当泛型类型在“out”处声明时,您不能将其作为输入参数 I

我遇到了一个问题——这是我的班级结构

public interface IModel{}

public interface IGenericMapper<T> where T : IModel {...}

public class ActualModel:IModel {...}

public class ActualMapper: IGenericMapper<ActualModel> {...}
显然,当泛型类型在“out”处声明时,您不能将其作为输入参数

IGenericMapper<out T>
IGenericMapper
以支持您的场景,但这会应用其他限制

只需
IGenericMapper
!=<代码>iEnergicMapper即使
实际模型:IModel

在大多数情况下,有一个非泛型的基本接口是有意义的。例如,请参见
IList
,它实现了
IList

然后,您可以选择在实现上显式实现接口成员。请参见
List.GetEnumerator():IEnumerable

不要在假设可以消除任何地方的强制转换的情况下使用泛型。我已经试过了,C#根本没有这方面所需的功能


我建议使用
IGenericMapper
接口作为
IGenericMapper
的基本接口,然后在
IGenericMapper
上执行您的通用代码,最后(此时您已经拥有了该类型)将它转换回特定的类型。

非常确定,在这里,随着通用更改,您将进入共变的领域

试试这个:

public interface IModel{}
public interface IGenericMapper< out T> where T : IModel{}
public class ActualModel : IModel{}
public class ActualMapper : IGenericMapper<ActualModel>   {}

您可以添加ILFFMapper的定义吗?
var ILFFMapper
这是一个语法错误,请删除
var
关键字您需要一个共变类型。尝试IGenericMapper
ActualMapper
IGenericMapper
不是
IGenericMapper
因此结果为空抱歉,我将实际代码转换为问题的通用代码-已修复
T GetModel(busO bBusinessObject);
busO  SetBusObject(T source, busO  target);
IGenericMapper<out T>
public interface IModel{}
public interface IGenericMapper< out T> where T : IModel{}
public class ActualModel : IModel{}
public class ActualMapper : IGenericMapper<ActualModel>   {}
IGenericMapper<IModel> blah = new ActualMapper();
IGenericMapper<ActualModel> blah = new ActualMapper();
interface IGenericMapper<out TModel, in TKeyOrIdent> 

TModel GetModel(TKeyOrIdent bBusinessObject);
void SetModel(object model, TKeyOrIdent target);