CS0122和CS0143之间的C#编译器错误差异

时间:2015-12-14 13:37:00

标签: c# .net compiler-errors

让我们考虑以下第一个例子:

public class ClassNameExample
{
    private ClassNameExample()
    {
        //code goes here    
    }
}

现在,如果我尝试在同一个程序集中实例化ClassNameExample类,那么由于它的保护级别,我将得到一个" Inaccessible"编译器错误消息(CS0122)。

但是,如果我尝试从不同的程序集中实例化ClassNameExample类,我会得到一个"类型'类'没有定义构造函数"编译器错误消息(CS0143

有人可以解释为什么编译器看到它们不同吗?

作为参考,我在Visual Studio 2012,.NET 4.5中尝试了这一点。

1 个答案:

答案 0 :(得分:1)

我试图了解Microsoft.CSharp.CSharpCodeGenerator的作用,并找出填充错误的位置,但最后的代码依赖于外部文件。

我能给你的唯一答案是:如果你用

创建一个实例
Assembly.GetExecutingAssembly().CreateInstance("ClassNameExample");

甚至是Activator.CreateInstance("Your assembly", "ClassNameExample");

都返回null,因为它们依赖于公共构造函数,请检查标志

    public object CreateInstance(string typeName)
    {
      return this.CreateInstance(typeName, false, BindingFlags.Instance | BindingFlags.Public, (Binder) null, (object[]) null, (CultureInfo) null, (object[]) null);
    }

    Activator.CreateInstance(assemblyName, typeName, false, BindingFlags.Instance | BindingFlags.Public | BindingFlags.CreateInstance, (Binder) null, (object[]) null, (CultureInfo) null, (object[]) null, (Evidence) null, ref stackMark);