tea*_*man 7 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
Run Code Online (Sandbox Code Playgroud)
(我在Web.Properties和Web.Ctrl之前删除了类路径,它通常包含它)
它引用的代码片段
public Properties.UITitleSettings UISettings
{
get
{
return _uiSettings;
}
}
Run Code Online (Sandbox Code Playgroud)
我不太确定这个错误试图说的是什么.类型是否需要转换(两个不兼容的类型之间的隐式转换无效?)还是类覆盖问题?
小智 24
请看以下定义.通知Foo是可见的任何人,它的公共方法GetBar也可见于任何人谁可以看到Foo:
public class Foo
{
public Bar GetBar() { return new Bar(); }
}
Run Code Online (Sandbox Code Playgroud)
这是以下定义Bar:
internal class Bar {}
Run Code Online (Sandbox Code Playgroud)
注意Bar是程序集的内部,而Foo对所有人都可见. Foo无法暴露Bar给外界,所以编译器抛出此异常.
另一个例子是:
public class Foo
{
public Foo.Bar GetBar() { return new Bar(); }
private class Bar {}
}
Run Code Online (Sandbox Code Playgroud)
Bar是一个私有类,Foo只能对实例可见Foo. Foo无法将此类型公开给外界,因此编译器会抛出相同的异常.
重构的例子:
将隐藏类型设为公开
public class Bar {}
public class Foo { public class Bar {} }
Run Code Online (Sandbox Code Playgroud)封装
public class BarEncapsulator
{
private Bar _bar;
internal BarEncapsulator(Bar myBar) { _bar = myBar; }
public string BarString { get { return _bar.MyString; } }
}
Run Code Online (Sandbox Code Playgroud)隐藏一切
internal class Bar {}
internal class Foo { public class Bar {} }
Run Code Online (Sandbox Code Playgroud)重构它
public class BarEncapsulator
{
private string _barString;
public string BarString { get { return _barString; } }
}
Run Code Online (Sandbox Code Playgroud)| 归档时间: |
|
| 查看次数: |
24888 次 |
| 最近记录: |