我注意到编译器错误当我错误地尝试实例化一个特殊类时,类型'...'没有定义生成的构造函数.
这让我想知道如果有人试图实例化它,我会如何编写自己的类来促成这个消息.
那么下面的代码,我需要做MyClass什么?
namespace MyNamespace
{
class Program
{
static void Main(string[] args)
{
MyClass mc = new MyClass();
}
}
class MyClass
{
MyClass()
{
}
}
}
Run Code Online (Sandbox Code Playgroud)
Fré*_*idi 42
如果类仅定义内部构造函数并尝试从另一个程序集实例化它,则会发生此错误(CS0143).
public class MyClass
{
internal MyClass()
{
}
}
Run Code Online (Sandbox Code Playgroud)
Jon*_*eet 11
我已成功通过以下方式重现:
ildasm它将其反编译为ILilasm如果不删除abstract/sealed修饰符,C#编译器会将其识别为静态类,并提供不同的错误消息.当然,你可以从"普通"类型开始,也只是删除构造函数.
编辑:我实际上认为我没有提交这个,因为我首先看到了"内部"构造函数.但是,我现在将其保留,因为我的版本使C#编译器正确 - 没有可访问构造函数的类型与真正没有构造函数的类型之间存在差异:)
我相信你需要使类的构造函数内部为了让它抛出这个异常.我相信你也需要这个类存在于另一个程序集中.
namespace MyNamespace
{
class Program
{
static void Main(string[] args)
{
MyClass mc = new MyClass();
}
}
}
namespace DifferentNamespace
{
class MyClass
{
internal MyClass()
{
}
}
}
Run Code Online (Sandbox Code Playgroud)