我尝试将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;
}
}
我不太确定这个错误试图说什么。类型是否需要转换(两个不兼容的类型之间的隐式转换无效?)还是类覆盖问题?
答案 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 {}
}
Bar
是Foo
的私有类,只能对Foo
的实例显示。 Foo
无法将此类型公开给外部世界,因此编译器会抛出相同的异常。
重构示例:
将隐藏的类型设为公开
public class Bar {}
public class Foo { public class Bar {} }
封装
public class BarEncapsulator
{
private Bar _bar;
internal BarEncapsulator(Bar myBar) { _bar = myBar; }
public string BarString { get { return _bar.MyString; } }
}
隐藏所有内容
internal class Bar {}
internal class Foo { public class Bar {} }
重构它
public class BarEncapsulator
{
private string _barString;
public string BarString { get { return _barString; } }
}
答案 1 :(得分:1)
默认界面是这样的
Interface ICourseRepository{
}
改成
Public Interface ICourseRepostory{
}
答案 2 :(得分:0)
删除“类路径”将不会执行任何操作。你只是让你的代码更简洁...... 检查Properties.UITitleSettings的定义。它将是私人或受保护等。