为什么我的C#类告诉我没有零参数的构造函数?

时间:2013-03-20 11:53:02

标签: c#

我有以下内容:

public class TestService : BaseService, IDisposable
{
    public TestService(IRepositoryProvider repositoryProvider)
    {
    }
    public IRepository<Exam> Exams { get { return GetStandardRepo<Exam>(); } }

}

public class BaseService : IDisposable
{
    public BaseService(IRepositoryProvider repositoryProvider)
    {
        CreateDbContext();

        repositoryProvider.DbContext = DbContext;
        RepositoryProvider = repositoryProvider;
    }
}

有人能告诉我为什么第一堂课上有一个错误,说“基础服务没有采用零参数的构造函数”吗?

5 个答案:

答案 0 :(得分:7)

您需要调用基础构造函数:

public TestService(IRepositoryProvider repositoryProvider) : base(repositoryProvider)
{
}

答案 1 :(得分:2)

您需要通过链接将IRepositoryProvider传递给BaseService构造函数:

public class TestService : BaseService, IDisposable
{
    public TestService(IRepositoryProvider repositoryProvider) : 
           base(repositoryProvider)
    {
    }
    public IRepository<Exam> Exams { get { return GetStandardRepo<Exam>(); } }
}

由于您尚未这样做,因此会将其解释为尝试使用无参数构造函数初始化BaseService

答案 2 :(得分:1)

您需要调用BaseService的基础构造函数。像这样改变你的实现:

public class TestService : BaseService, IDisposable
{
    public TestService(IRepositoryProvider repositoryProvider)
    : base(repositoryProvider)
    {
    }
    public IRepository<Exam> Exams { get { return GetStandardRepo<Exam>(); } }

}

答案 3 :(得分:1)

原因是基类不包含参数less构造函数,即带有0个参数的构造函数。

当调用此派生类的构造函数时,它将调用基类的参数less构造函数,因为没有显式调用基类的构造函数,并且因为基类中没有参数较少的构造函数发生错误。

答案 4 :(得分:0)

因为TestService中的构造函数会尝试在没有参数的情况下调用BaseService

修正:

public TestService(IRepositoryProvider repositoryProvider): base(repositoryProvider){ }