根据以下定义
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>
接口(interface) - 这部分转换很容易。棘手的一点是将 ITable<Url>
转换为 ITable<IUrl>
,因为这两种类型实际上没有任何关系......
在 4.0 之前的 C# 中,没有简单的方法可以做到这一点 - 您将明确需要为正确的泛型类型创建 ITable<..>
的新实现(例如通过委托(delegate))。在 C# 4.0 中,只要 ITable
是 covariant interface 就可以完成此转换。
关于c# - 如何在 C# 中将泛型类转换为泛型接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3681098/