在C#中,为什么一个类的数组创建并初初始化,还要分别为它的每个元素初始化,请看补充,说不太清楚:
控制台程序:学习中:我的问题是在注释的地方,谢谢啦。usingSystem;usingSystem.Collections.Generic;usingSystem.Lin...
控制台程序:学习中:我的问题是在注释的地方,谢谢啦。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace self1
{
class person
{
public int age;
public string name;
public void sayhello()
{
Console.WriteLine("我的名字是{0},我的年龄是{1}",name,age);
}
}
class Program
{
static void Main(string[] args)
{
person[] persons=new person[2];//在这里创建 persons数组,两个元素,并初始化。
persons[0] = new person();//为什么还要对persons[0]再单独初始化呢,不是已经初始化过了啦?
persons[0].age = 25;
persons[0].name = "xiaofeng";
persons[0].sayhello();
persons[1].age = 26;//我不初始化person[1],就会出错,感觉和别的语言不一样,如C等。
persons[1].name = "xiaoye";
persons[1].sayhello();
}
}
} 展开
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace self1
{
class person
{
public int age;
public string name;
public void sayhello()
{
Console.WriteLine("我的名字是{0},我的年龄是{1}",name,age);
}
}
class Program
{
static void Main(string[] args)
{
person[] persons=new person[2];//在这里创建 persons数组,两个元素,并初始化。
persons[0] = new person();//为什么还要对persons[0]再单独初始化呢,不是已经初始化过了啦?
persons[0].age = 25;
persons[0].name = "xiaofeng";
persons[0].sayhello();
persons[1].age = 26;//我不初始化person[1],就会出错,感觉和别的语言不一样,如C等。
persons[1].name = "xiaoye";
persons[1].sayhello();
}
}
} 展开
4个回答
展开全部
peeson[] persons=new person[2]是创建一个二个元素的数组,;
persons[0]=new person是对数组元素person实例化,这个数组的元素是person类,这时只定义了一个类对像,并没有对这个对象实例化,所以对每个元素都 要实例化
persons[0]=new person是对数组元素person实例化,这个数组的元素是person类,这时只定义了一个类对像,并没有对这个对象实例化,所以对每个元素都 要实例化
追问
peeson[] persons;这不是创建一个数组吗;
peeson[] persons=new person[2]不是已经初始化了吗;
为什么还是“只定义了一个类对像,并没有对这个对象实例化,所以对每个元素都 要实例化 ”?
转不过来,谢谢你啦,呵呵,感觉和别的语言不一样。像C中,int p1[5].然后直接p1[1]=1;也不用这样啦。
2011-10-02
展开全部
真无语,这不是废话么,
你不初始化。他怎么知道age是多少?
这句话:
Console.WriteLine("我的名字是{0},我的年龄是{1}",name,age);
可是调用了name和age的。
你不初始化。他怎么知道age是多少?
这句话:
Console.WriteLine("我的名字是{0},我的年龄是{1}",name,age);
可是调用了name和age的。
追问
我的意思是不要这句:persons[0] = new person();
直接写persons[0].age = 25;
persons[0].name = "xiaofeng";直接这样写为什么不行,为什么会出错。谢谢你啦。
追答
这个要从c#的代码的处理机制说起了。
peeson[] persons=new person[2]创建了一个占用两个peeson元素的的内存空间。但是这句话并不针对这两个peeson元素的空间内部。就像是凭空建立了一个桌子,但是这个桌子上面的抽屉的位置是固定的,而没有抽屉。
当你要用peeson元素内部的时候就需要下面这句这句。
persons[0] = new person();在相应的位置放上相应的抽屉。
正如
int i;
peeson peesons;
i不用new就直接能用,而peesons必须new一下才能用一样啊。类必须实例化。persons[0] = new person();这句就是让类实例化的。而peeson[] persons=new person[2]这句不是实例化,而是创建数组类。这两句是有区别的,虽然都用到了new。
c#的方法就是把数组当作一个特殊的类来处理。你用类来建数组,就相当于在你原先写的类上系统自动为你建造了一个该类的数组的继承类。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
person[]为一个类数组,使用非静态类时必须初始化,上一行只是对数组进行初始化。
非静态类时使用前需要初始化,在各种语言中都一样
非静态类时使用前需要初始化,在各种语言中都一样
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你调用了name和age的。当然要初始化,不然它怎么知道age是多少?
追问
persons[0].age = 25;
persons[0].name = "xiaofeng";
这样写为不什么不行啦,这也是初始化, persons[0] = new person();这句不要为什么不行, person[] persons=new person[2];/这不也是初始化啦。谢谢你啦,
为什么要对每个元素单独初始化呢?像最后的注释处就不行。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询