A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 万大述 中级黑马   /  2013-6-27 18:11  /  2158 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

写一个person类,实例化一个该类的数组chinese,然后分别对数组中的元素赋值,运行时弹出异常,求指导。代码如下:
static void Main(string[] args)
        {
            person[] chinese = new person[3];
            chinese[0].Name = "张?三¨y"; // 错误出在这里,说未将对象引用设置到对象的实例
            chinese[0].Sex = "男D";
            chinese[0].Age = 18;
            chinese[0].SayHello();
        }
class person
    {
        string name;
        public string Name
        {
            get { return name; }
            set { name = value; }
        }
        string sex;
        public string Sex
        {
            get { return sex; }
            set { sex = value; }
        }
        int age;
        public int Age
        {
            get { return age; }
            set { age = value>0?value:0; }
        }
        public void SayHello()
        {
            Console.WriteLine("大家好,我叫{0},我是{1}同学,我今年{2}岁了!",name,sex,age);
        }

评分

参与人数 1技术分 +1 收起 理由
苏波 + 1

查看全部评分

6 个回复

倒序浏览
您好,您这样是对对象数组进行初始化! person[] chinese = new person[3];   里面的对象并未实例化!    你分别对里面的对象进行实例化! 如:chinese[0]=new person();
之后调用对象的属性,或者方法,这样就不会报异常了!   

评分

参与人数 1技术分 +1 收起 理由
苏波 + 1

查看全部评分

回复 使用道具 举报
class Person
{
    privatestring m_name = "N/A";
   private int m_Age = 0;
    //Declare a Name property of type string:
    publicstring Name
    {
       get
        {
           return m_name;
        }
       set
        {
           m_name = value;
        }
    }
    // Declare an Age property of type int:
    publicint Age
    {
       get
        {
           return m_Age;
        }
       set
        {
           m_Age = value;
        }
    }
    publicoverride string ToString()
    {
       return "Name = " + Name + ", Age = " + Age;
    }
}
class TestPerson
{
    staticvoid Main()
    {
        //Create a new Person object:
       Person person = new Person();
        //Print out the name and the age associated with the person:
       System.Console.WriteLine("Person details - {0}", person);
        //Set some values on the person object:
       person.Name = "Joe";
       person.Age = 99;
       System.Console.WriteLine("Person details - {0}", person);
        //Increment the Age property:
        person.Age += 1;
       System.Console.WriteLine("Person details - {0}", person);
    }
}
Person details - Name = N/A, Age = 0
Person details - Name = Joe, Age = 99
Person details - Name = Joe, Age = 100

回复 使用道具 举报 1 0
我是这样理解的,不知道对不对
  1. static void Main(string[] args)
  2.         {
  3.             person[] chinese = new person[3];//这句话是说new了一个person类型的数组实例,但是数组里的元素还是没有实例化
  4.             chinese[0] = new person();//加上这句就不报错了。
  5.             chinese[0].Name = "张?三¨y"; // 错误出在这里,说未将对象引用设置到对象的实例
  6.             chinese[0].Sex = "男D";
  7.             chinese[0].Age = 18;
  8.             chinese[0].SayHello();

  9.         }
复制代码

评分

参与人数 1技术分 +1 收起 理由
苏波 + 1

查看全部评分

回复 使用道具 举报
{:soso_e113:}多谢各位的帮助。。。
回复 使用道具 举报
Person[] chinese = new Person[3];
这样只是定义了一个长度为3的Person数组,但是并没有为每个Person实例化对象,因此当你对Person的属性赋值就会报错(你上面那个错误)。
回复 使用道具 举报
  1. static void Main(string[] args)
  2.         {
  3.                         //person[] chinese = new person[3];
  4.                         person chinese = new person();
  5.                         chinese.Name = "张?三¨y"; // 错误出在这里,说未将对象引用设置到对象的实例
  6.                         chinese.Sex = "男D";
  7.                         chinese.Age = 18;
  8.                         chinese.SayHello();
  9.                         Console.ReadKey();
  10.         }
  11.                 class person
  12.                 {
  13.                         string name;
  14.                         public string Name
  15.                         {
  16.                                 get { return name; }
  17.                                 set { name = value; }
  18.                         }
  19.                         string sex;
  20.                         public string Sex
  21.                         {
  22.                                 get { return sex; }
  23.                                 set { sex = value; }
  24.                         }
  25.                         int age;
  26.                         public int Age
  27.                         {
  28.                                 get { return age; }
  29.                                 set { age = value > 0 ? value : 0; }
  30.                         }
  31.                         public void SayHello()
  32.                         {
  33.                                 Console.WriteLine("大家好,我叫{0},我是{1}同学,我今年{2}岁了!", name, sex, age);
  34.                         }
  35.                 }
复制代码

评分

参与人数 1技术分 +1 收起 理由
杞文明 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马