带有强制转换异常的C#.NET 4.0泛型协方差问题

我一直在争取这个,所以任何帮助将不胜感激。这是我在C#.NET 4.0上遇到的场景。
public interface ITableBusinessLogicLayerIn<in TTableRecord> : IBusinessLogicLayer
    where TTableRecord : ITableRecord
{
// No definition
}

public interface ITableBusinessLogicLayerOut<out TTableRecord> : IBusinessLogicLayer
    where TTableRecord : ITableRecord
{
// No definition
}
我有一个实现两个接口的对象。代码编译好。但是在运行时,我可以按如下方式转换此对象:
(ITableBusinessLogicLayerOut<ITableRecord>)obj
但不是这样的:
(ITableBusinessLogicLayerIn<ITableRecord>)obj
这非常混乱,我不确定我做错了什么。有人请指出我正确的方向。谢谢!     
已邀请:
Contravariance(in)允许您将具有较少特定类型的类型参数的对象转换为更具体类型之一。例如,您不能将对象传递给期望字符串的类型,因此您无法将期望字符串的类型转换为期望对象的类型。有关详细信息,请参阅此处:http://msdn.microsoft.com/en-us/library/ee207183%28d=lightweight%29.aspx 给出以下示例:
class MyTableRecord : ITableRecord { }
ITableBusinessLogicLayerIn<ITableRecord> inA;
ITableBusinessLogicLayerIn<MyTableRecord> inB;
ITableBusinessLogicLayerOut<ITableRecord> outA;
ITableBusinessLogicLayerOut<MyTableRecord> outB;
您可以将
inB
分配给
inA
,但不能反过来。您可以将
outA
指定给
outB
,但不能指定相反。     

要回复问题请先登录注册