CS0122和CS0143之间的C#编译器错误差异
本文关键字:编译器 错误 误差 CS0143 之间 CS0122 | 更新日期: 2023-09-27 18:26:52
让我们考虑以下第一个例子:
public class ClassNameExample
{
private ClassNameExample()
{
//code goes here
}
}
现在,如果我试图从同一个程序集中实例化ClassNameExample
类,我会收到一条"由于其保护级别而无法访问"的编译器错误消息(CS0122)。
然而,如果我试图从不同的程序集实例化ClassNameExample
类,我会得到一条"类型'class'没有定义构造函数"的编译器错误消息(CS0143)
有人能解释为什么编译器认为它们不同吗?
作为参考,我已经在Visual Studio 2012.NET 4.5中尝试过这一点。
我试图了解Microsoft.CSharp.SharpCodeGenerator的功能,并找出错误的填充位置,但最终的代码依赖于外部文件。
我能给你的唯一答案是:如果你用创建一个实例
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);