我在我的App类中为正在进行的WPF应用程序添加了一些可绑定的CLR属性,由于这种不一致的可访问性错误,我无法编译。
不一致的可访问性:属性类型'SomeProj.Error'比属性'SomeProj.App.LatestError'
更难访问
要解决此错误,我必须将class Error
更改为public class Error
。
在VB中,类被公开,大部分时间都省略了访问修饰符。在C#中也不是这样吗?
我最近才进行了vb-> c#跳转,语法中的这些细微差别使我慢下来。
答案 0 :(得分:4)
在类或结构之外声明的内容将默认为internal。在类或结构内声明的事物将默认为私有。参考http://msdn.microsoft.com/en-us/library/ba0a1yw2(VS.80).aspx
答案 1 :(得分:4)
不了解vb,但在c#类中默认作为限制性修饰符,这意味着 - 它们是internal
,除非它们嵌套在另一个类中 - 在他们是private
。
这是一个complete guide( - :
答案 2 :(得分:0)
虽然通常认为在所有访问修饰符中显式是好的做法,但允许在某种默认情况下省略它们并不是不合理的。
当然,默认必须是明智的。如果默认是公共的并且它被不恰当地使用那么就没有办法静态地确定它是一个错误(除非它暴露了其他地方以较少访问权限定义的类型),代码可能会持续几个月或几年才有人注意到这个漏洞,然后修复它将是对装配的一个重大改变。
因为默认值在适用的地方是私有的,在所有其他情况下都是内部的,那么如果这是一个错误,它将导致编译器错误(因为某些东西需要它具有更大的访问权限),这很容易被捕获,或者在类中根本不被其他程序集看到(容易被捕获,特别是对于大多数IDE)。
因此,限制性默认值是显而易见的方法。