【问题标题】:Why is my C# class telling me there's no constructor with zero arguments?为什么我的 C# 类告诉我没有零参数的构造函数?
【发布时间】:2013-03-20 19:57:46
【问题描述】:

我有以下:

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;
    }
}

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

【问题讨论】:

  • 因为BaseService 没有零参数的构造函数。它只有一个参数。
  • 默认情况下,编译器只能调用基类的无参数构造函数,否则您必须手动添加该调用

标签: c#


【解决方案1】:

你需要调用你的基础构造函数:

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

【讨论】:

    【解决方案2】:

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

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

    由于您还没有这样做,它被解释为尝试使用不存在的无参数构造函数初始化BaseService

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        【解决方案4】:

        原因是基类不包含无参数构造函数,即接受 0 个参数的构造函数。

        当调用这个派生类的构造函数时,它将调用基类的无参数构造函数,因为没有显式调用基类的构造函数,并且由于上述基类中没有无参数构造函数发生错误。

        【讨论】:

          【解决方案5】:

          因为TestService 中的构造函数会尝试不带参数地调用BaseService

          修复:

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-05-18
            • 2012-12-29
            • 2014-06-18
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多