我有一个通用控制器,我传递一个只包含属性的类。一切都很好但是......
我想在Controller类中创建另一个继承传递类的类。
有点像这样:
public class Products
{
public Int32 ProductID {get; set;}
public String ProductName {get; set;}
}
public class ProductController : Controller<Products>
{
public ProductsController() : base("Products", "ProductID", "table", "dbo")
{
}
}
public class Controller<T> : IDisposable where T : new()
{
protected Controller(String tablename, String keyname, String entitytype, String tableschema = "dbo")
{
...
}
//How do I create the Recordset class inheriting T
public class Recordset : T //<----This is what I don't know how to do
{
public Int32 myprop {get; set;}
public void MoveNext()
{
//do stuff
}
}
}
如何使用T继承创建Recordset类?
答案 0 :(得分:6)
编译器won't let you do that(因为我确定错误消息告诉你):
无法从&#39;标识符&#39;中获取因为它是一个类型参数
类型参数不能指定泛型类的基类或接口。从特定类或接口或特定泛型类派生,或将未知类型包含为成员。
您可以使用封装而不是继承:
public class Controller<T> : IDisposable where T : new()
{
public class RecordSet
{
private T Records;
public RecordSet(T records)
{
Records = records;
}
public void MoveNext()
{
// pass through to encapsulated instance
Records.MoveNext();
}
}
}
答案 1 :(得分:0)
您可以使用Reflection.Emit命名空间下的类来执行此操作。但如果你正在挖掘那么远,你可能会发现你不需要继承。
答案 2 :(得分:0)
public class Controller<T> : IDisposable where T : class, new()
{
protected Controller(String tablename, String keyname, String entitytype, String tableschema = "dbo")
{
...
}
public class Recordset<TT> where TT : class, new()
{
public TT myinheritedclass {get; set}
public Int32 myprop {get; set;}
public void MoveNext()
{
//do stuff
}
}
public Recordset<T> myRecordset = new Recordset<T>()
}