Chinaunix首页 | 论坛 | 博客
  • 博客访问: 48815
  • 博文数量: 12
  • 博客积分: 266
  • 博客等级: 二等列兵
  • 技术积分: 120
  • 用 户 组: 普通用户
  • 注册时间: 2012-10-09 10:17
文章分类

全部博文(12)

文章存档

2013年(1)

2012年(11)

我的朋友

分类: 嵌入式

2012-10-10 17:08:49

结构,枚举,数组的小结

首先是结构:

结构的声明struct structName{} 

对于结构有一些注意点:

这里对结构体和 类做一个比较:

  1. 结构体是值类型,而类必须是引用类型,之前学值类型和引用类型的时候有这样一句话:所有的值类型都可以看做是结构体,而所有的引用类型都可以看做是类
  2. 结构体的实例化可以用两种方法: a.用new关键字来声明:Mystr str=new Mystr(); str.i;                                                b.直接赋值:Mystr str1;str1=100;
  3. 结构体和类一样都有一个默认的构造函数,当类中没有声明构造函数的时候会调用默认的构造函数,一旦定义了一个构造函数之后就不会再调用默认的构造函数。但是在结构体中即是用户自己定义了构造函数还是会调用默认的构造函数(是不是在结构体中就没有声明构造函数的必要了?,看到博客的帮忙解答下)
  4. 结构的成员就是直接在结构体里面的,即第一级的,若结构体里面还嵌套的有方法则方法内的成员不属于结构体。类中{}里面的都是类的成员
  5. 结构体不使用引用,因此结构体中没有标识符。
  6. 一个结构不能从另一个结构或类继承,而且不能作为一个类的基类,即也不能被继承。
    结构可以实现接口。
  7. 结构的成员访问修饰符可以是public,internal,默认修饰符为internal。
     
  8. 结构可包含构造函数(有参),常量,字段,方法,属性,索引器,事件和嵌套类型。
     
  9. 成员的访问修饰符可是private,public但不可以是protected 因为protected只有在继承的时候使用 因为结构体不可以被继承。

  10. 结构体中不能有实例字段和初始值。

  11. 字段:
    普通字段:如果有构造函数,必需在构造函数中初始化,如果没有构造函数,字段则自动初始化。
    静态字段:常量字段不需要在构造函数中初始化。
    在结构中,静态字段和常量用结构名调用。
    方法:
    普通方法实例化后调用

  12. 静态方法用类中用类名调用,结构体中用结构名调用

枚举:

  1. 通常个数不是很多的时候用枚举
  2. 枚举可以跟类定义一个级别
  3. 每种枚举类型都有基础类型,该类型可以是除char类型以外的任何整形,枚举元素的默认基础类型为int。默认情况下,第一个枚举数的值为 0,后面每个枚举数的值依次递增 1。
     
  4. 属性枚举的应用:[Flags]//使用哪个要在哪个枚举上面加上[Flags]并且位运算定义的枚举值必需为1,2,4,8,16,32...然后用|可实现多个属性的选择。好处:即在同一个变量拥有多个值,但是唯一的属性用普通的枚举即可
        enum ABC
        {
            A=1,
            B=2,
            C=4,
            D=8,
            E=16,
            F=32
        }
        static void Main(string[] args)
            {
                //*** ***=***.女|***.男;//定义一个***类型的变量
                //Console.WriteLine(***);//  Console.WriteLine((int)***)将***转换为int类 型    ABC a = ABC.A| ABC.B | ABC.C | ABC.D;
                Console.WriteLine(a);//结果为15
                               }
  5. 枚举的属性用ENUM来调用:
     class Program
        {
            static void Main(string[] args)
            {
                //遍历所有枚举类型的值 用foreach循环打印下来
                foreach (string str in Enum.GetNames(typeof(ConsoleColor)))
                {
                    Console.WriteLine(str);
                }
                Console.BackgroundColor = (ConsoleColor)Enum.Parse(typeof(Console), "Red");//把枚举中有的string类型转换成枚举类型
    先用Enum.Parse转换成枚举类型但这个时候不知道具体是什么类型  typeof(Console)参数是告诉是什么枚举类型  Red是这个参数是告诉把什么
    字符串转换成枚举类型 Enum.Parse(typeof(ConsoleColor), "Red")是一个Object类型 然后用 (ConsoleColor)强制转换成ConsoleColor类型        }
        }
      

数组:

一维数组就是线,二维数组是面,三维数组是体

数组有一维数组,二维数组,多维数组,交错数组

一维数组的声明:

int[] arr={1,2};

int[] a=new int[]{};

Array  myarr=Array.CreateInstance(typeof(int),5);

一维数组的初始化

 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 = { 1, 2 };

遍历:

1,for循环

for(int i=0;i

{

Console.WriteLine(arr[i]);

}

2.foreach循环

foreach(int i in arr)

{

 Console.WriteLine(i);

}

 

二维数组:

声明:

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

二维数组的初始化

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

二维数组的遍历:

for(int i=0;i

{

 for(int j=0;j

{

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

}

}

foreach(int i in arr)

{

 Console.WriteLine(i);//注意这里是i,i代表二维数组的每一个元素

}

交错数组

声明:

int[][] arr3=new int[3][];//外层数组有3个元素,第一个值必需给 第二个必需空着

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

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

arr3[2]=new int{5};

//用foreach遍历交错数组

      foreach (int[] i in arr3)
    {
              foreach (int j in i)
              {
                 Console.WriteLine(j);
            }
    }

//用for循环遍历交错数组

            for (int i = 0; i < arr3.Length; i++)
            {
               for (int j = 0; j < arr3[i].Length; j++)
                {
                    Console.WriteLine(arr3[i][j]);
                }
            }

定义一个一维数组,它的每个元素是个二维数组:
            int[][,] arr12 = new int[2][,];//一维数组arr12里面套了一个二维数组这个二维数组有两个元素,这两个元素都是二维数组
            arr12[0] = new int[2, 1] { { 1 }, { 2 } };//一维数组arr12的第一个元素为 arr12[0],它里面是一个二维数组,为两行一列元素分别为1,2
            arr12[1] = new int[2, 2] { { 4, 5 }, { 6, 7 } };//一维数组arr12的第二个元素为 arr12[1],它里面是一个二维数组,为两行两列元素分别为
            for (int i = 0; i < arr12.Length; i++)
            {
                for (int j = 0; j < arr12[i].GetLength(0); j++)
                {
                    for (int k = 0; k < arr12[i].GetLength(1); k++)
                    {
                        Console.WriteLine(arr12[i][j, k]);
                    }
                }
            }

     用CreateInstance(Type, array[]) 创建数组

       创建一个Array的实例,类型为Type,维数为动态的维数
           Array MyArr1 = Array.CreateInstance(typeof(int), 2, 3);
           MyArr1.SetValue(1, 0, 0);//给第一行第一列赋值1
          MyArr1.SetValue(2, 0, 1);//给第一行第二列赋值2
            MyArr1.SetValue(3, 1, 0);//给第二行第一列赋值3
           /foreach (int i in MyArr1)
            {
           Console.WriteLine(i);
          }   

 

3、 CreateInstance(Type, array[]()[])
创建一个Array的实例,类型为Type,维数为动态的维数
Array MyArr = Array.CreateInstance(typeof(int), 2, 3);
MyArr.SetValue(1, 0, 0);
MyArr.SetValue(2, 0, 1);
MyArr.SetValue(3, 1, 0);
foreach (int i in MyArr)
{
      Console.WriteLine(i);
 }

 

3 CreateInstance(Type, array[]()[])

创建一个Array的实例,类型为Type,维数为动态的维数

Array MyArr = Array.CreateInstance(typeof(int), 2, 3);

MyArr.SetValue(1, 0, 0);

MyArr.SetValue(2, 0, 1);

MyArr.SetValue(3, 1, 0);

foreach (int i in MyArr)

{

      Console.WriteLine(i);

 }

 

 CreateInstance(Type, Int32, Int32)

 

 

创建一个Array的实例,类型为Type,一维度数值,二维度数值

Array MyArr = Array.CreateInstance(typeof(int), 2, 3);

MyArr.SetValue(1, 0, 0);

MyArr.SetValue(2, 0, 1);

MyArr.SetValue(3, 1, 0);

foreach (int i in MyArr)

{

      Console.WriteLine(i);

 }

阅读(479) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~