繁体   English   中英

通用类和向下转换(类型转换)

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM