求助:解析并解决C#可访问性不一致错误问题
解决C#中“不一致的可访问性”相关错误
咱来拆解你遇到的这两个错误,其实本质都是访问修饰符不匹配导致的——编译器绝对不允许“对外暴露的成员,其依赖的类型却藏起来不让外部访问”这种矛盾情况:
第一个错误:不一致的可访问性:找不到属性类型‘IProductRepository’
这个问题大概率是你定义的IProductRepository接口(或类)的访问权限太严格了。举个例子:如果你在一个public的类里声明了一个public的属性,类型是IProductRepository,但这个接口本身却是internal或者private的——外部代码能看到这个公共属性,却看不到它的类型,这完全不合理,编译器自然会报错。
第二个错误:不一致的可访问性:属性类型‘IEnumerable’的可访问性低于属性‘IProductRepository.Products’
这个和第一个是同款逻辑,只是问题出在Product类上。比如你的IProductRepository.Products属性是public的,但Product类却是internal的——外部代码调用Products时,拿到的是IEnumerable<Product>,但根本不知道Product是什么类型,这显然行不通。
解决办法很直接,统一访问级别就行:
- 如果你需要对外暴露这些成员(比如给其他项目调用),就把依赖的类型改成
public:
把IProductRepository改成公共接口:
再把public interface IProductRepository { IEnumerable<Product> Products { get; } }Product类改成公共类:public class Product { // 你的类成员定义 } - 如果不需要对外暴露,那就降低使用这些类型的成员的访问级别。比如把
Products属性改成internal,和Product类的访问权限保持一致,这样内部代码能用,外部也看不到,就不会有冲突了。
内容的提问来源于stack exchange,提问作者Jake Kwon
相关产品推荐
相关产品推荐

