您的位置:首页 > 编程语言 > C#

C#基础-结构、枚举和数组(Day4)

2011-07-15 18:37 501 查看
今天说点什么吧,四天了,实训四天了,说实话,实训的生活真不是那么轻松,每天几乎要对着电脑老老实实坐那儿八个小时以上,有时候为了一个问题想得头疼欲裂,有时甚至连吃饭的时候都跟同学讨论着今天所学的内容,尽管这样,总还是感觉每天过得都好充实,时间都不够用,每天想得更多的是赶紧办完事回去学习,慢慢的我真的觉得其实我对编程还是有那么一点点兴趣的,很想知道四个月后我会是以什么样的状态去参加面试,在公司工作,会拿到一个什么样的薪水,我想大概是这样吧,就像春天里我种下一粒种子,然后用心灌溉用尽所有力气,为的是秋天到来的时候能够得到应有成果。说白了,为了我以后和我的家人有个美好的未来,也为了我对编程小小的热爱,我在心底对自己说“加油!”。

从第一天上课老师就要求我们把我们每天所学的内容整理下来放在自己的博客中,这真的是一个好方法,因为它本身都是一个不断学习不断提高的过程,在你整理博客的同时又完完整整地把一天所学的知识过了一遍,也许某天你突然回头看这些东西的时候,你会有不同的发现。好了,废话就不多说了,来整理今天所学的知识吧!

今天主要学习的还是C#基础,其中包括三部分内容,分别是结构体、枚举和数组,下面分别对其做了整理:

1、结构体:结构体可以声明构造函数(与类不同),但必须带参数,一个结构可以继承接口,但不能继承结构和类,结构体可以赋null值,为结构体声明字段不能为其赋值。

结构体的访问修饰符可以是public、internal,默认修饰符是internal(本程序集内可以访问),但是不能 为protected或private,因为结构体不能继承结构体

结构可以包含构造函数(有参),常量、字段、方法、属性、索引器、事件和嵌套类型。成员的访问修饰符是private、public,但不可以是protected

结构体实例化的两种方法:1)用关键字new实例化,同类的实例化方法相同 2)可以直接对其赋值,类中没有这个实例化方法

例:

class Program

{

static void Main(string[] args)

{

mystr str = new mystr();//实例化结构体的方法一,同类实例化一样

mystr str1;

str1.i = 10;//实例化结构体的方法二,可以直接对其赋值

Console.WriteLine(str1.i);

}

}

struct mystr

{

public int i;

}//结构体与类是并行的

补充一个小知识:C#的数据类型分两种:数值类型(本质是结构体,都集成ValueType)和引用类型(本质是类,都继承Objiect); 结构不是一个类型,它是用来定义类型的。

2、枚举:enum 关键字用于声明枚举,即一种由一组称为枚举数列表的命名常量组成的独特类型(例:可以为人的性别定义一个枚举), 每种枚举类型都有基础类型,该类型可以是除 char 以外的任何整型。枚举元素的默认基础类型为 int。默认情况下,第一个枚举数 的值为 0,后面每个枚举数的值依次递增 1。

位枚举:用来表示如果一个变量有多个属性有多个属性值时,可以用位枚举,用关键字[Flags ]声明,如:一个人的国籍可以有几个,

或者如字体,一个字体可以同时拥有枚举里面所列举的一种或者多种风格,这时就需要位枚举

注:必须定义这样一组值,使得每两个属性值的或运算都不会重复。

例:class Program

{

[Flags]

enum marry

{

已婚=1,

未婚=2,

有配偶=4

}

static void Main(string[] args)

{

//marry ma = (marry)6;

//marry ma1 = marry.未婚 | marry.有配偶;

//Console.WriteLine(ma1);

foreach (string str in Enum.GetNames(typeof(marry)))

{

Console.WriteLine(str);

}//将枚举类型marry中枚举的常量名全部列举出来

//Console .WriteLine( (Enum .Parse((typeof(marry)),"未婚")));

//Console.WriteLine(Enum.Format (typeof (marry),2,"D"));

foreach (int i in Enum.GetValues (typeof(marry)))

{

Console.WriteLine(i);

}//将枚举类型marry中枚举的常量名全部列举出来

}

}

可以利用枚举的一些函数为其做不同的操作:

foreach (string str in Enum.GetNames(typeof(ConsoleColor)))

{

Console.WriteLine(str);

}//ConsoleColor是一个枚举名称,先将其转换成type类型,然后利用枚举Enum的GetNames方法取得它的值,

其最终目标是把枚举类型的常数名全部列举出来

foreach (int i in Enum.GetValues(typeof(ConsoleColor)))

{

Console.WriteLine(i);

}//将枚举类型ConsoleColor的常数对应的值全部列举出来

Console.BackgroundColor = (ConsoleColor)Enum.Parse(typeof(ConsoleColor), "Red");//把一个ConsoleColor枚举中

//的字符串Red转换成某一个枚举类型,此时它是一个对象,它的运行结果同下一行代码相同

Console.BackgroundColor = ConsoleColor.Red;

3、数组:用来存储一组相同数据类型的数据,由Array继承过来的。

一维数组的定义、初始化、遍历:

1、int[] arr = new int[2] { 1, 2 };

2、int[] arr = new int[] { 1, 2 };

3、int[] arr = new int[2];

arr[0] = 1;

arr[1] = 2;

4、

int[] arr = { 3,56,67,546,1};

foreach (int i in arr)

{

Console.WriteLine(i);

}//foreach遍历并输出每一个数组元素

for (int i = 0; i < arr.Length; i++)

{

Console.WriteLine(arr[i]);

}//for遍历并输出每一个数组元素

Array.Sort(arr);//数组的排序

foreach (int i in arr)

{

Console.WriteLine(i);

}//遍历并输出排序后的每一个数组元素

二维数组的定义、初始化、遍历:

int[,] arr = { { 1, 2 }, { 3, 4 } };

for (int i = 0; i < arr.GetLength(0); i++)

{

for (int j = 0; j < arr.GetLength(1); j++)

{

Console.WriteLine(arr[i,j]);

}

}

foreach (var i in arr)

{

Console.WriteLine(i);

}

交错数组:数组中的元素也是数组,即数组中有数组。

int[][] arr2=new int [3][];

arr2[0] = new int[] { 1,2,3};

arr2[1] = new int[] { 1, 2};

arr2[2] = new int[] { 4,5,6,7};

foreach (int[] i in arr2)

{

foreach (int j in i)

{

Console.WriteLine(i);

}

}

for (int i = 0; i < arr2.Length; i++)

{

for (int j = 0; j < arr2[i].Length; j++)

{

Console.WriteLine(arr2 [i][j]);

}

}

练习:定义一个交错数组,交错数组中又存放的是一个二维数组,试用for或foreach遍历并输出其数组的值

int [][,] arr3=new int [2][,];

arr3[0] = new int[2, 1]{ { 1 }, { 3 } };

arr3[1]=new int [1,1]{{2}};

foreach (int[,] i in arr3 )

{

foreach (int j in i)

{

Console.WriteLine(j);

}

}

for (int i = 0; i < arr3.Length; i++)

{

for (int j = 0; j < arr3[i].GetLength(0); j++)

{

for (int k = 0; k < arr3[i].GetLength(1); k++)

{

Console.WriteLine(arr3[i][j,k]);

}

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: