【发布时间】:2019-03-22 13:04:54
【问题描述】:
在 .NET Core C# 中 我正在尝试这样的事情:
(IInterface<IParameter>)instance
实例在哪里new Implementation<Parameter>()
还有Implementation : IInterface & Parameter : IParameter
问题在于泛型参数的转换。当我提供Parameter 而不是IParameter 时,它可以工作,但在编译时无法知道将使用哪个实现IParameter 的类型。所有这些对象都将通过反射创建。
那么这个演员有什么办法吗?或者其他一些实现这一点的方法,比如像 typeof 那样不提供泛型类型参数。
编辑感谢 Ziriax
一个完整的例子:
interface IInterface
{
void Run(TInput input);
}
abstract class AbstractClass<TInput> : IInterface
where TInput : IParameter
{
public abstract void Execute(TInput input);
public void Run(IParameter input)
{
Execute((TInput)input);
}
}
interface IParameter {}
class Implementation : AbstractClass<Parameter>
{
public void Run(Parameter input)
{
}
}
class Parameter : IParameter {}
class Program
{
static void Main()
{
object instance = new Implementation();
var castInstance = (IInterface) instance;
castInstance.Run(new Parameter());
}
}
【问题讨论】:
-
如果您使用
out,它会解决您的问题,但函数除外(注释掉函数和代码运行)。我还在研究这个功能 -
感谢您的回复!我忘了添加
in修饰符。由于TInput被用作参数,我不能使用out协变,或者我可以吗?
标签: c# .net generics reflection interface