读书人

C# 求解 很简单的一个代码 本人刚接触

发布时间: 2012-08-13 13:21:53 作者: rapoo

C# 求解 很简单的一个代码 本人刚刚接触

C# code
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!!");        }    }}






错误“第二季.Person”不包含采用“0”个参数的构造函数
求解~~!

[解决办法]
C# code
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添加一个无参的构造函数就行了。
[解决办法]
C# code
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!!");
}
}


读书人网 >C#

热点推荐