C# 未提供必須形參對應的實參


今天寫了個繼承,結果老提示這個錯誤,萌新的基礎很不牢固,Mark一下吧

 public TeachManager(string name, string phone, string email) : base(name, phone, email)

 

父類有了帶參數的構造函數,子類的構造函數可以不和父類的構造函數一樣,但是,如果你的父類定義了帶參數的構造函數同時沒有無參重載的情況下,那么在子類中,你必須對父類的帶參數的構造進行賦值,也就是實參!在你這個里面
class TeachManager:Teach{    
public TeachManager()  :base("","","")      {          }
}
如果父類有無參的構造函數重載 就可以不用傳遞實參
class A     {       
public A() { }       
public A(string a) { }     
}      
class B : A     {        
public B() { }   
 }   
//或者
class A     {      
}     

class B : A     {        
public B() { }    
} 
都是可以的 
public TeachManager(string name,string phone,string email) 
  :base(name,phone,email)  //可以理解為base就是調用父類構造函數的簡寫,便於傳遞參數
    {
     
    }
相當於
public TeachManager(string name,string phone,string email) 
{
    Teach T=new Teach(name,phone,email)
}
只是一個參數的傳遞,賦值的地方在Teach中
原因的是子類在實例化時,會調用父類的構造方法。父類有一個默認的構造方法無參構造方法,重寫了父類的構造方法會覆蓋掉默認的構造方法。調用的是需要參數的構造方法,需要傳值給它.使用base關鍵字
我的案例
父類
    public partial class BaseService<Entity, TKey> : IBaseService<Entity, TKey> where Entity : class
    {
        protected readonly IBaseRepository<Entity, TKey> _repository;

        public BaseService(IBaseRepository<Entity, TKey> repository)//繼承類中用Base()傳遞參數
        {
            _repository = repository;
        }
//.......... }

子類

    public partial class zgdmbService: BaseService<zgdmb, string>, IzgdmbService
    {
        //private readonly IzgdmbRepository _repository;//在父類中定義了

        public zgdmbService(IzgdmbRepository repository):base(repository)//base是給父類構造函數傳遞參數
        {
            //_repository = repository;
        }
//......
}

 


來自:https://iask.sina.com.cn/b/1SV0KaKBkpip.html
https://blog.csdn.net/qq_38061677/article/details/81021646


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM