类定义中的“不一致的可访问性”

我正在我的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

这是一个完整的指南 ( – :