[英]Generic class issues when typecasting in constructors base() call c#
[英]Generic class and downcasting (typecasting)
public interface ISomeDTOInterface
{
...
}
public class SomeDTOClass : ISomeDTOInterface
{
...
}
public interface DataStoreChanges<T>
{
IEnumerable<T> data {get;}
IEnumerable<Guid> removedItems {get;}
IEnumerable<Guid> newItems {get;}
IEnumerable<Guid> modifiedItems {get;}
}
现在我有一种期望的方法
DataStoreChanges<ISomeDTOInterface>
,所以我尝试传递DataStoreChanges<SomeDTOClass>
的实例,该实例会产生类型错误。 它不会让我垂头丧气到界面:)所以这里出了什么问题。
在C#4中,可以使接口协变。 为此,请将接口声明更改为:
public interface DataStoreChanges<out T>
否则,可以使该方法通用,并添加相关的类型约束。
void SomeMethod<T> (DataStoreChanges<T> x) where T : ICommonInterface
{
...
}
您遇到了问题,因为默认情况下您未指定该方法应允许使用更多派生的T类型,从这种意义上来说,它不是协变的。 通过将接口定义更改为:
public interface DataStoreChanges<out T>
这将允许协方差。
如果这不可能,我想您也可以where T : ICommonInterface
的通用约束where T : ICommonInterface
我认为您缺乏类型约束-但是您可以实际添加非编译代码吗?
where T:ICommonInterface
但这只是基于您其他信息的有根据的猜测。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.