可访问性不一致的错误

时间:2009-10-27 17:47:04

标签: c# visual-studio-2008

我尝试将ASP.Net应用程序从Visual Studio 2005升级到2008,我尝试编译只是为了验证它是否会编译并且我收到了此错误。

Error   1   Inconsistent accessibility: property type 'Web.Properties.UITitleSettings' is less accessible than property 'Web.Ctrl.BasePanel.UISettings' \\projectLocation\Ctrl\BasePanel.cs 25  43  ProjectName

(我删除了Web.Properties和Web.Ctrl之前的类路径,它通常包含它)

它引用的代码

public Properties.UITitleSettings UISettings
    {
        get
        {
            return _uiSettings;
        }
    }

我不太确定这个错误试图说什么。类型是否需要转换(两个不兼容的类型之间的隐式转换无效?)还是类覆盖问题?

3 个答案:

答案 0 :(得分:24)

查看以下定义。注意Foo对所有人都可见,任何可以看到GetBar的人都可以看到其公开方法Foo

public class Foo 
{ 
    public Bar GetBar() { return new Bar(); } 
}

以下是Bar

的定义
internal class Bar {}

注意Bar 是程序集内部,而Foo对所有人都可见。 Foo无法将Bar公开给外界,因此编译器会抛出此异常。

另一个例子是:

public class Foo 
{ 
    public Foo.Bar GetBar() { return new Bar(); } 
    private class Bar {} 
}

BarFoo私有类,只能对Foo的实例显示。 Foo无法将此类型公开给外部世界,因此编译器会抛出相同的异常。


重构示例:

  1. 将隐藏的类型设为公开

    public class Bar {}
    public class Foo { public class Bar {} }
    
  2. 封装

    public class BarEncapsulator
    {
      private Bar _bar;
      internal BarEncapsulator(Bar myBar) { _bar = myBar; }
      public string BarString { get { return _bar.MyString; } }
    }
    
  3. 隐藏所有内容

    internal class Bar {}
    internal class Foo { public class Bar {} }
    
  4. 重构它

    public class BarEncapsulator
    {
      private string _barString;
      public string BarString { get { return _barString; } }
    }
    

答案 1 :(得分:1)

默认界面是这样的

Interface ICourseRepository{

}

改成

Public Interface ICourseRepostory{

}

答案 2 :(得分:0)

删除“类路径”将不会执行任何操作。你只是让你的代码更简洁...... 检查Properties.UITitleSettings的定义。它将是私人或受保护等。