编译报错:
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);
}
}
意思是说, 重写与显式接口实现方法 的约束是有基类继承的,你不能再在子类又指定或者改变这个规则。
也就是说子类不能改变父类的 约束规则。把 public override void Add<T>(T item) where T: class 改成 public override void Add<T>(T item) 就OK。
这就是字面上的意思,"泛型约束"
public override void Add<T>(T item) where T: class
比如调用这个方法时,给add传递泛型,而这个泛型类型必须是class(一个类),这样有个限制就不会在调用的时候误传别的类型的参数,不会导致程序错误。
泛型约束的引入让程序员在操作C#类型时更加的规范和准确,为了提供强编译时检查和减少类型转换.
楼上正解