C# 求解 很简单的一个代码 本人刚刚接触
using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace 第二季{ class Program { static void Main(string[] args) { Person p1 = new Person("ahgnsan", 20); p1.SayHello(); 中国人 p2 = new 中国人(); p2.Name = "lisi"; p2.gonfu(); p2.hukou = "nanjing"; Console.ReadKey(); } } class Person { public string Name { get; set; } public int Age { get; set; } public Person(string name) { this.Name = name; } public Person(int Age) { this.Age = Age; } public Person(string name, int age) { this.Age = age; this.Name = name; } public void SayHello() { Console.WriteLine("你好"); } } class 中国人 : Person { public string hukou { set; get; } public void gonfu() { Console.WriteLine("wo da!!"); } }}
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Collections;using System.IO;namespace ConsoleApplication6{ class Program { static void Main(string[] args) { Person p1 = new Person("ahgnsan", 20); p1.SayHello(); 中国人 p2 = new 中国人(); p2.Name = "lisi"; p2.gonfu(); p2.hukou = "nanjing"; Console.ReadKey(); } } class Person { public string Name { get; set; } public int Age { get; set; } public Person() { } public Person(string name) { this.Name = name; } public Person(int Age) { this.Age = Age; } public Person(string name, int age) { this.Age = age; this.Name = name; } public void SayHello() { Console.WriteLine("你好"); } } class 中国人 : Person { public string hukou { set; get; } public void gonfu() { Console.WriteLine("wo da!!"); } }}
[解决办法]
中国人 : Person
因为"中国人"这个类有一个默认的0参构造函数,这就要求它的基类也有一个0参的构造函数,但是不存在,所以报错了。
你只需要给Person添加一个无参的构造函数就行了。
[解决办法]
class Person { public string Name { get; set; } public int Age { get; set; } //这个类中要包含一个空参的构造函数 public Person() { } //因为有带参数的构造函数,上面的空参函数是必须的 public Person(string name) { this.Name = name; } public Person(int Age) { this.Age = Age; } public Person(string name, int age) { this.Age = age; this.Name = name; } public void SayHello() { Console.WriteLine("你好"); } }
[解决办法]
这个 到没注意到 我百度了下 得到结果
因为构造子类前必定构造父类 中国人继承自Person 而当你(new 中国人)的时候 首先会先构造Person 而你的父类Person又没有0个参数的构造函数 所以当然出错.
[解决办法]
继承的类,初始化的时候会先执行基类的构造函数,如你的“中国人”类,继承了Person类;则初始化“中国人”类的时候,会先执行基类Person的构造函数。Person基类里面有两个构造函数的重载,两个构造函数都有参数,但你的继承类“中国人”里构造函数是没有给基类的构造函数提供参数。以致报错。
有三个办法:
一、给基类提供无参数的构造函数:
在Person类里写
public Person(string name){ }
二、初始化继承类的构造函数提供参数:
中国人 p2 = new 中国人(20);或中国人 p2 = new 中国人("ahgnsan", 20);
三、在继承类的构造函数中提供基类的参数:
public class 中国人 : Person
{
public 中国人():base(30){}
public string hukou { set; get; }
public void gonfu()
{
Console.WriteLine("wo da!!");
}
}