我有一个父类
public class GenericRepository<TEntity> where TEntity : class
{
//Implementation
}
我想从这个班继承,但我似乎无法做到正确,这是我的尝试
public class CustomerRepository<Customer> : GenericRepository<Customer>
{
//implementation
}
或者这个,
public class CustomerRepository<T> : GenericRepository<T> where T : new Customer()
{
}
或者这个
public class CustomerRepository<T> : GenericRepository<CustomerRepository<T>> where T : CustomerRepository<T>
{
}
无论我做什么,我都会收到此错误。请告诉我如何从这个类继承,类共享相同的命名空间
错误'GenericRepository'不包含带有0个参数CustomerRepository.cs
的构造函数答案 0 :(得分:4)
听起来你想要一个从泛型继承的非泛型类,如下所示:
public class CustomerRepository : GenericRepository<Customer>
{
}
如果您希望这是一个缩小泛型参数类型的泛型类(只允许Customer
或派生类型):
public class CustomerRepository<T> : GenericRepository<T>
where T : Customer
{
}
关于编译时错误:
Error 'GenericRepository<Customer>' does not contain a constructor that takes 0 arguments
这正是它所说的。您尚未在派生类中定义构造函数,这意味着隐式生成了构造函数,就像您键入了这样:
public CustomerRepository() : base() { }
但是,基类(GenericRepository<Customer>
)没有不带参数的构造函数。您需要在派生类CustomerRepository
中显式声明构造函数,然后在基类上显式调用构造函数。
答案 1 :(得分:1)
您不需要在派生类中重复type参数,因此:
public class CustomerRepository : GenericRepository<Customer>
{
//implementation
}
是你需要的。
答案 2 :(得分:0)
使用可写为:
public class CustomerRepository : GenericRepository<Customer>
{
//implementation
}
答案 3 :(得分:0)
您的基类似乎没有没有参数的构造函数,如果是这样,派生类必须声明a.constructor并使用参数调用基类构造函数。
class MyBase { public MyBase(object art) { } }
class Derived : MyBase {
public Derived() : base(null) { }
}
在此示例中,如果从Derived中删除ctor,则会出现相同的错误。