【发布时间】:2015-12-14 13:36:59
【问题描述】:
让我们考虑以下第一个示例:
public class ClassNameExample
{
private ClassNameExample()
{
//code goes here
}
}
现在,如果我尝试在同一个程序集中实例化 ClassNameExample 类,我将收到“由于其保护级别而无法访问”编译器错误消息 (CS0122)。
但是,如果我尝试从不同的程序集实例化 ClassNameExample 类,我会收到“类型‘类’没有定义构造函数”编译器错误消息 (CS0143)
有人能解释为什么编译器会看到它们不同吗?
作为参考,我在 Visual Studio 2012 .NET 4.5 中尝试过。
【问题讨论】:
-
老实说,当您在同一个程序集中时,编译器知道私有构造函数的存在,因此它告诉您它是私有的。当您在另一个程序集中时,它根本不知道,它只知道该类没有公开任何公共构造函数
-
我的猜测是,因为在编译同一个程序集时,编译器会看到构造函数定义,但它是私有的,因此无法访问。编译另一个程序集时,编译器只能看到该程序集的已发布接口,甚至无法访问内部。在该公共接口中,没有构造函数,就编译器而言,没有构造函数。但是,我无法引用任何可靠的消息来源,因此我很高兴看到有人将其发布为答案。
标签: c# .net compiler-errors