0

我有一个父类

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 的构造函数

4

4 回答 4

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然后在基类上显式调用构造函数。

于 2013-10-06T23:08:25.347 回答
1

您不需要在派生类中重复类型参数,因此:

public class CustomerRepository : GenericRepository<Customer> 
    {
       //implementation
    }

是你需要的。

于 2013-10-06T23:08:40.000 回答
0

使用可以写成:

 public class CustomerRepository : GenericRepository<Customer> 
 {
        //implementation
 }
于 2013-10-06T23:10:32.680 回答
0

似乎您的基类没有没有参数的构造函数,如果是这样,派生类必须声明 a.constructor 并调用带参数的基类构造函数。

class MyBase { public MyBase(object art) { } }
class Derived : MyBase {
    public Derived() : base(null) { }
 }

在这个例子中,如果你从 Derived 中删除 ctor,你会得到同样的错误。

于 2013-10-06T23:22:57.897 回答