黑马程序员技术交流社区

标题: 对类赋值异常 [打印本页]

作者: 万大述    时间: 2013-6-27 18:11
标题: 对类赋值异常
写一个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);
        }

作者: $love    时间: 2013-6-27 18:47
您好,您这样是对对象数组进行初始化! person[] chinese = new person[3];   里面的对象并未实例化!    你分别对里面的对象进行实例化! 如:chinese[0]=new person();
之后调用对象的属性,或者方法,这样就不会报异常了!   

作者: 许庭洲    时间: 2013-6-27 20:14
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


作者: 蔓越莓    时间: 2013-6-27 20:46
我是这样理解的,不知道对不对
  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.         }
复制代码

作者: 万大述    时间: 2013-6-28 08:23
{:soso_e113:}多谢各位的帮助。。。
作者: 关关雎鸠    时间: 2013-6-28 16:31
Person[] chinese = new Person[3];
这样只是定义了一个长度为3的Person数组,但是并没有为每个Person实例化对象,因此当你对Person的属性赋值就会报错(你上面那个错误)。
作者: .netNo1    时间: 2013-7-8 14:04
  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.                 }
复制代码





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2