Inconsistent Accessibility error
I tried upgrading an ASP.Net application from Visual Studio 2005 to 2008, and I tried compiling just to verify that it would compile and I received this error.
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
(I removed the class path before Web.Properties and Web.Ctrl, it normally contains it)
The piece of code开发者_高级运维 its referencing is
public Properties.UITitleSettings UISettings
{
get
{
return _uiSettings;
}
}
I'm not quite sure what this error is attempting to say. Does the type need to be casted (invalid implicit cast between two incompatible types?) or is it a class override issue?
Look at the following definition. Notice Foo is visible to anyone, and its public method GetBar is also visible to anyone who can see Foo:
public class Foo
{
public Bar GetBar() { return new Bar(); }
}
Here's the definition of Bar:
internal class Bar {}
Notice Bar is internal to the assembly, whereas Foo is visible to all. Foo cannot expose Bar to the outside world, so the compiler throws this exception.
Another example would be:
public class Foo
{
public Foo.Bar GetBar() { return new Bar(); }
private class Bar {}
}
Bar is a private class of Foo and can only be visible to instances of Foo. Foo cannot expose this type to the outside world, so the compiler throws the same exception.
Examples of refactoring:
Make the hidden type public
public class Bar {} public class Foo { public class Bar {} }Encapsulation
public class BarEncapsulator { private Bar _bar; internal BarEncapsulator(Bar myBar) { _bar = myBar; } public string BarString { get { return _bar.MyString; } } }Hide everything
internal class Bar {} internal class Foo { public class Bar {} }Refactor it away
public class BarEncapsulator { private string _barString; public string BarString { get { return _barString; } } }
By default, the interface will be like this
Interface ICourseRepository{
}
Change it to
Public Interface ICourseRepostory{
}
Removing the "class path" won't do anything. You're just making your code less verbose... Check the definition of Properties.UITitleSettings. It'll be private or protected etc.
加载中,请稍侯......
精彩评论