編譯報錯:Error 1 Constraints for override and explicit interface implementation methods are inherited from the base method, so they cannot be specified directly 這上面的英文說啥呢?下面是代碼片段 public class SQLDataAccess : DataAccess { public SQLDataAccess() { base.virtualRoomDC = new VirtualRoomDataContext(); } // public abstract void Add<T>(T item) where T: class; 實現這個方法 public override void Add<T>(T item) where T: class { if (this.IsValidated<T>(item)) { Table<T> table = base.virtualRoomDC.GetTable<T>(); bool itemAlreadyExists = table.Contains<T>(item); table.InsertOnSubmit(item); } }
2 回答

慕森王
TA貢獻1777條經驗 獲得超3個贊
意思是說, 重寫與顯式接口實現方法 的約束是有基類繼承的,你不能再在子類又指定或者改變這個規則。
也就是說子類不能改變父類的 約束規則。把 public override void Add<T>(T item) where T: class 改成 public override void Add<T>(T item) 就OK。

明月笑刀無情
TA貢獻1828條經驗 獲得超4個贊
這就是字面上的意思,"泛型約束"
public override void Add<T>(T item) where T: class
比如調用這個方法時,給add傳遞泛型,而這個泛型類型必須是class(一個類),這樣有個限制就不會在調用的時候誤傳別的類型的參數,不會導致程序錯誤。
泛型約束的引入讓程序員在操作C#類型時更加的規范和準確,為了提供強編譯時檢查和減少類型轉換.
- 2 回答
- 0 關注
- 483 瀏覽
添加回答
舉報
0/150
提交
取消