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