##################################################
目录
##################################################
一维数组
——————————
C# 中的一维数组
我们在 Java 中接触过数组
想想看 我们在什么情况下会用到数组?
答案是:
我们需要使用同一类型的多个值 这时就需要用到数组了
C# 中的一维数组与 Java 不同 不过也很简单
对了 什么叫一维数组? 我记得曾经说过一次
有一维就有多维 不过现在距离我们有些遥远 也暂时用不到
——————————
声明数组
在 Java 中是怎样声明数组的呢?
还想的起来吗?
哈哈 正常 我们常用的有两种形式:
数据类型[] 数组名;
数据类型 数组名[];
但是在 C# 中只有一种方式声明数组:
数据类型[] 数组名;
那就是不能把方括号放在数组名的后面!
示例 声明数组 array 数组类型为整型:
int[] array;
——————————
初始化数组
不过 C# 中的数组和 Java 初始化数组的语法是一样的!
创建一个含有 10 个整型数组的数组:
int[] array = new int[10] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
省略数组长度创建数组的语法也同 Java 一样:
int[] arr_1 = new int[] { 0, 1, 2, 3, 4 };
或者省略 new 关键字:
int[] arr_2 = { 0, 1, 2 };
是不是跟 Java 的初始化一样?
第一条语句声明并初始化了一个长度为 10 的整型数组 array 并且给数组中的每个元素都赋了初值
这三条语句的区别也是很明显 第一条语句声明了:
[10]
那么数组长度就由方括号来决定:
数据类型[] 数组名 = new 数据类型[值个数] { 值列表 };
第二条、第三条语句的作用是完全一样的
没有用方括号指定长度 那数组长度就由大括号中的初值个数决定:
数据类型[] 数组名 = new 数据类型[] { 值列表 };
是不是很好理解?
——————————
访问数组
同 Java 也是下标概念
也从 0 下标开始:
数组名 [下标]
不过 C# 将之称之为
索引
——————————
数组长度
在 C# 中需要得到数组的长度时 不应该是用数组定义的长度
而是使用:
数组名.Length
语句获得
跟 Java 的 .length 类似 不过首字母却是大写
##################################################
对象数组
——————————
对象数组是干嘛的
眼熟啵?
曾经你怎么也想不通的对象数组!
整型数组 是用来储存 数字 的
字符数组 是用来储存 汉字 的
那么 对象数组 就是用来储存 对象 的!
对象 是 类 的一个实例
就是说 对象 是通过 类 创造出来的一个 东东
我们就是要储存这个创造出来的 对象/东东
——————————
对象数组存储原理
类 里面有什么:
特征/字段
行为/方法
那么这个 对象 就是 类 中的一个
每个 对象 都有一组独特的 特征/字段
所有 类 能干的事/行为/方法 这个 对象 也能干
就是说 这些实例化出来的一个个 对象 之间
区别就是这组 特征/字段我们也可以这样想 储存的 一个个 对象
储存的都是 一个个 特征/字段
——————————
数组对象测试程序
%%%%%
学生类
示例 我们用 C# 写一个程序 思路如下:
分为 Program/主类、Student/学生类 两个类 主类只有一个 Main() 方法
学生类有 name/姓名、age/年龄 特征 还有一个 show()/输出信息 的功能
然后我们定义对象数组 stus 来分别储存对象 stus[N]
然后分别实例化一个个对象 挨个赋值储存到对象数组
最后的 demo 如下:
学生的信息为 >>>
姓名_老姐姐 年龄_38
姓名_小老弟 年龄_6
姓名_李二哈 年龄_7
姓名_李三岁 年龄_3
姓名_李白眼 年龄_1
先看看没有注释的代码:
namespace _10.数组对象_学生类
{
public class Program
{
static void Main(string[] args)
{
Student[] stus = new Student[5];
stus[0] = new Student();
stus[0].name = "老姐姐";
stus[0].age = 38;
stus[1] = new Student();
stus[1].name = "小老弟";
stus[1].age = 6;
stus[2] = new Student();
stus[2].name = "李二哈";
stus[2].age = 7;
stus[3] = new Student();
stus[3].name = "李三岁";
stus[3].age = 3;
stus[4] = new Student();
stus[4].name = "李白眼";
stus[4].age = 1;
Console.WriteLine("学生的信息为 >>> ");
foreach (Student stu in stus)
{
stu.show();
}
Console.ReadLine();
}
}
class Student
{
public string name;
public int age;
public void show()
{
Console.WriteLine("姓名_{0}\t年龄_{1}", name, age);
}
}
}
仔细讲解一下
先看学生类 code:
class Student
{ /* 学生类 */
public string name; // 特征 学生姓名字段
public int age; // 特征 学生年龄字段
public void show()
{ /* 行为 自我介绍方法 */
Console.WriteLine("姓名_{0}\t年龄_{1}", name, age);
}
}
程序类 code:
public class Program
{ /* 程序类 */
static void Main(string[] args)
{ /* 程序入口 */
/* 定义对象数组 stus 能储存 5 个对象 */
Student[] stus = new Student[5];
/* 分别实例化储存对象 然后为对象数组元素赋值 */
/* 数组 stus 储存的第一个对象 stu[0] */
stus[0] = new Student(); /* 创建 stus 对象数组索引为 1 的对象 */
stus[0].name = "老姐姐"; /* stus 对象数组索引为 1 的对象的姓名 */
stus[0].age = 38; /* stus 对象数组索引为 1 的对象的年龄 */
/* 数组 stus 储存的第二个对象 stu[1] */
stus[1] = new Student();
stus[1].name = "小老弟";
stus[1].age = 6;
/* 数组 stus 储存的第三个对象 stu[2] */
stus[2] = new Student();
stus[2].name = "李二哈";
stus[2].age = 7;
/* 数组 stus 储存的第四个对象 stu[3] */
stus[3] = new Student();
stus[3].name = "李三岁";
stus[3].age = 3;
/* 数组 stus 储存的第五个对象 stu[4] */
stus[4] = new Student();
stus[4].name = "李白眼";
stus[4].age = 1;
/* 遍历对象数组 */
Console.WriteLine("学生的信息为 >>> ");
foreach (Student stu in stus)
{
stu.showInfo();
}
/* 输入任意信息回车以结束 */
Console.ReadLine();
}
}
此时 对象数组 stus 中的每个元素都是一个 Student/学生 对象!
每个 Student/学生 对象有不同的 姓名、年龄 !