根据以下定义
interface myin
{
int id { get; set; }
}
class myclass:myin
{
public int id { get; set; }
}
[Database]
public sealed class SqlDataContext : DataContext, IDataContext
{
public SqlDataContext(string connectionString) : base(connectionString){}
public ITable<IUrl> Urls
{
get { return base.GetTable<Url>(); } //how to cast Table<Url> to ITable<IUrl>?
}
...
}
更新:
public IEnumerable<IUrl> Urls
{
get { return base.GetTable<Url>(); }
}
因此通过使用上述方法,我没有与Table类相关的方法和能力。这是一个好的解决方案吗?为什么?
最佳答案
在C#3.0和odler中,这不容易实现-另请参见C#4.0中的covariance and contravariance。
问题在于Table<Url>
实现了ITable<Url>
接口-这部分的转换很容易。棘手的一点是将ITable<Url>
转换为ITable<IUrl>
,因为这两种类型实际上没有任何关联...
在4.0之前的C#中,没有简单的方法可以执行此操作-您明确需要为正确的泛型类型创建新的ITable<..>
实现(例如通过委派)。在C#4.0中,只要ITable
是covariant interface,就可以完成此转换。