C#Linq DataContext表:多态转换

时间:2016-06-17 16:24:51

标签: c# linq generics polymorphism

我正在尝试编写方法:

public Table<ParentType> GetTableFromContext()    {
   //return a table of type Table<ChildType> 
}

是的,我可以使用Generics来解决这个问题:

public Table<T> GetTableFromContext<T>() where T : ParentType   {
   //return a table of type Table<T> 
}

但我不愿意。 (然后我必须在所有基类中使用泛型)
是否有解决方案来引用具有较少特定类型的表?

2 个答案:

答案 0 :(得分:1)

据我所知,你的问题是“我想返回几种类型之一,但我不想要复杂的继承”。如果是这样,那么您的解决方案就是标记界面

public interface ITable {}

返回类型

可以实现(没有界面成员,非常简单)
public class ChildType1 : ITable

此外,界面可用于在您的实体上强制执行通用结构(如果它们有任何实体)(最常见的示例可能是Id属性)

答案 1 :(得分:1)

您可以在协变的帮助下解决此问题,但在这种情况下,您应该使用接口ITable而不是类Table作为方法的返回类型:< / p>

public interface ITable<out T>
{}

public class Table<T> : ITable<T>
{}    

public ITable<ParentType> GetTableFromContext() {
    return new Table<ChildType>();
}