2013-10-06 94 views
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

回答

0

看来你的基类有没有参数没有构造,如果是这样的派生类必须声明a.constructor和调用基类的构造函数的参数。

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

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

+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

您不需要重复类型参数的派生类,所以:

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

是你所需要的东西。

+0

谢谢,我只是尝试过,仍然无法建立。同样的确切错误。我将重新启动Visual Studio以查看是否有帮助。 –

0

使用可以作为写:

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