📅  最后修改于: 2023-12-03 15:26:15.604000             🧑  作者: Mango
当我们在使用某些类的时候,可能会遇到以下的错误信息:
无法为没有参数的类型调用初始化程序
这是因为我们在使用这个类的时候,传入了错误的参数,或者根本没有传入任何参数。
下面我们来看一个简单的例子:
class Person {
public string Name { get; set; }
public Person() {
Name = "default";
}
public Person(string name) {
Name = name;
}
}
class MainClass {
public static void Main (string[] args) {
Person person1 = new Person(); // 报错
Person person2 = new Person("Tom");
Console.WriteLine(person1.Name);
Console.WriteLine(person2.Name);
}
}
在上面的例子中,我们定义了一个 Person
类,并定义了两个构造函数,分别是不带参数的和带一个字符串类型参数的。然后在 Main
函数中,我们试图通过调用不带参数的构造函数来创建一个 Person
的实例。但是这个时候,编译器就会报错:
无法为没有参数的类型调用初始化程序
这是因为我们在调用 Person
的不带参数的构造函数时,没有传入任何参数,而我们上面定义的不带参数的构造函数也没有默认的实现,所以编译器就会报错。
要解决这个问题,我们有两种方式:
我们可以在 Person
类中,再定义一个默认实现的不带参数的构造函数,它不需要任何参数,但是需要调用另一个有参数的构造函数,来初始化 Name
属性的值。具体实现如下:
class Person {
public string Name { get; set; }
public Person() : this("default") {
}
public Person(string name) {
Name = name;
}
}
class MainClass {
public static void Main (string[] args) {
Person person1 = new Person(); // 不再报错
Person person2 = new Person("Tom");
Console.WriteLine(person1.Name);
Console.WriteLine(person2.Name);
}
}
在上面的例子中,我们在 Person
类中,重新定义了一个不带参数的构造函数,并且它的实现是调用有参数的构造函数,并传入一个默认值 "default"
。
这样,在我们调用不带参数的构造函数时,就会默认调用这个新定义的构造函数,从而顺利地创建一个 Person
的实例了。
如果我们不想在 Person
类中再定义一个构造函数,也可以直接在调用构造函数时,传入正确的参数,如下所示:
class Person {
public string Name { get; set; }
public Person(string name) {
Name = name;
}
}
class MainClass {
public static void Main (string[] args) {
Person person1 = new Person("default"); // 传入一个默认值
Person person2 = new Person("Tom");
Console.WriteLine(person1.Name);
Console.WriteLine(person2.Name);
}
}
在上面的例子中,我们在调用不带参数的构造函数时,传入了一个默认的字符串 "default"
,这样就不会再报错了。
总结一下,当我们在使用某个类时,遇到了 无法为没有参数的类型调用初始化程序
错误信息时,应该检查一下是否有以下情况:
只要解决了这些问题,就可以顺利地使用该类了。