今天寫了個繼承,結果老提示這個錯誤,萌新的基礎很不牢固,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