.NET三层架构演示项目中CS0060不一致可访问性问题求助
解决CS0060: 基类可访问性低于派生类的问题
这个错误乍一看有点迷惑——明明EfEntityRepositoryBase和EfProductDal都标记成了public,怎么还会报可访问性不一致的错?其实问题出在你没注意到的地方:泛型基类的具体实例访问性被它的泛型参数限制了。
你看,EfProductDal继承的是EfEntityRepositoryBase<Product, NorthwindContext>,这里的第二个泛型参数是NorthwindContext。如果NorthwindContext的访问修饰符不是public(比如默认的internal),那么这个具体的EfEntityRepositoryBase<...>实例的访问级别就会变成internal,而你的EfProductDal是public的——这就违反了C#的规则:派生类的访问级别不能高于它的基类。
具体解决步骤:
- 找到你的
NorthwindContext类的定义文件(通常在DataAccess项目的EntityFramework目录下) - 检查它的访问修饰符,把默认的(无修饰符即internal)改成public:
public class NorthwindContext : DbContext { // 你的上下文配置、DbSet定义等代码 protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { // 你的数据库连接配置逻辑 } }
- 重新编译项目,这个错误应该就会消失了。
补充说明
C#里泛型类型的实际访问权限是由它所有类型参数的最低访问权限决定的。哪怕泛型类本身是public,但如果其中一个类型参数是internal,那么这个泛型类的具体实例就只能是internal级别。你的EfProductDal是public的,外部程序集可以访问它,但它的基类实例因为依赖了internal的NorthwindContext无法被外部访问,编译器自然会抛出这个错误。
内容的提问来源于stack exchange,提问作者AssSoonAsPossiblee
相关产品推荐
相关产品推荐

