C# 如何在C中将泛型类强制转换为泛型接口#
根据以下定义C# 如何在C中将泛型类强制转换为泛型接口#,c#,casting,generics,C#,Casting,Generics,根据以下定义 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(connection
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>?
}
...
}
接口myin
{
int id{get;set;}
}
类别myclass:myin
{
公共int id{get;set;}
}
[数据库]
公共密封类SqlDataContext:DataContext,IDataContext
{
公共SqlDataContext(string connectionString):基(connectionString){}
公共可编辑URL
{
get{return base.GetTable();}//如何将表强制转换为ITable?
}
...
}
更新:
public IEnumerable<IUrl> Urls
{
get { return base.GetTable<Url>(); }
}
公共IEnumerable URL
{
获取{return base.GetTable();}
}
所以通过使用上述方法,我没有表类相关的方法和能力。这是不是一个好的解决方案?为什么呢?在C#3.0和odler中,这是不容易做到的——请参见C#4.0
问题是Table
实现了ITable
接口-这部分转换很容易。棘手的一点是将ITable
转换为ITable
,因为这两种类型实际上没有任何关联
在4.0之前的C#中,没有简单的方法可以做到这一点-您将明确需要为正确的泛型类型(例如,通过委托)创建一个新的
ITable
实现。在C#4.0中,只要ITable
是一个函数,就可以进行这种转换。谢谢,我还发现了另一种非常容易实现的方法(但我知道这不是正确的解决方案),所以我现在更新了我的问题。你能看看并告诉我你的建议是什么吗