1、结构:struct类型是一种值类型,通常用来封装小型变量组。
   C#中的所有值类型都继承自ValueType,ValueType继承自Object。
2、结构的特点:
 (1)结构是值类型,而类是引用类型。
 (2)与类不同,结构的实例化可以不使用new运算符。
 (3)结构可以声明构造函数,但它们必须带参数。
 (4)一个结构不能从另一个结构或类继承,而且不能作为一个类的基类。所有结构都直接继承自System.ValueType,后者继承自System.Object。
 (5)结构可以实现接口。
 (6)结构可用作可为null的类型,因而可向其赋null值。
3、结构的声明:strct MyStr
              {
               }
4、结构的访问修饰符可以是public、internal,默认修饰符为internal.
   结构可包含构造函数(有参数)、常量、字段、方法、属性、索引器、事件和嵌套类型。
   结构成员的修饰符可以是private、public但不可以是protected。
   字段:普通字段如果有构造函数,必须在构造函数中初始化,如果没有构造函数,字段则自动初始化;静态字段,常量字段不需要在构造函数中初始化;
         在结构中,静态字段和常量用结构名调用。
   方法:普通方法实例化后调用,静态方法用结构名调用。
5、结构实例化的两种方式:
   struct MyStr
    {
      public int i;
    }
  (1)MyStr ms1=new MyStr();
  (2)MyStr ms2;
       ms2.i=10;
 例: class Program
    {
        static void Main(string[] args)
        {
             MyStr ms1 = new MyStr("");
            ms1.i = 100;
            MyStr.j = 30;
            Console.WriteLine(ms1.i);
            Console.WriteLine(MyStr.j);
        }
     }
      struct MyStr
    {
        public int  i;
        public  static int j=20;
        public MyStr(string s)
        {
            i = 10 ;
        }
       
    }
6、枚举:enum 关键字用于声明枚举,即一种由一组称为枚举数列表的命名常量组成的独特类型。
        给几个常数值从中选择。例:ConsoleColor.
        每种枚举类型都有基础类型,该类型可以是除char以外的任何×××。
        枚举元素的默认基础类型为int。默认情况下,第一个枚举数的值为0(也可以为负数),后面每个枚举数的值依次递增1.
  例:enum Food
    {
        包子 = 0,
        油条 = 1,
        豆浆 = 2,
        酸奶 = 3
    }
7、属性枚举(位枚举):将System.FlagsAttribute应用于某个枚举时,如果该枚举包含一些使用按位“或”运算组合的元素。
   把多个枚举值赋给同一个对象,例如:宋体斜体同时赋给一个字体。
 例:class Program
    {
        static void Main(string[] args)
        {
            Food f = Food.包子 | Food.豆浆;
            Console.WriteLine((int)f);
         }     
     }
     [Flags]
    enum Food
    {
        包子 = 1,
        油条 = 2,
        豆浆 = 4,
        酸奶 = 8
    }
8、数组的定义、初始化、遍历
(1)一维数组
            int[] arr1 = new[] { 1, 2, 3, 4, 5 };
            for (int i = 0; i < arr1.Length; i++)
            {
                Console.WriteLine(arr1[i]);
            }
            foreach (int i in arr1)
            {
                Console.WriteLine(i);
            }
(2)二维数组
      int[,] arr2 = { { 1, 2, 3, 4 }, { 5, 6, 7, 8 }, { 9, 10, 11, 12 } };
            for (int i = 0; i < arr2.GetLength(0); i++)
            {
                for (int j = 0; j < arr2.GetLength(1); j++)
                {
                    Console.WriteLine(arr2[i, j]);
                }
            }
(3)交错数组
            int[][] arr3 = new int[3][];
            arr3[0] = new int[]{1,2,3};
            arr3[1] = new int[]{4,5 };
            arr3[2] = new int[]{6,7,8,9 };
            for (int i = 0; i < arr3.Length; i++)
            {
                for (int j = 0; j < arr3[i].Length; j++)
                {
                    Console.WriteLine(arr3[i][j]);
                }
            }
            foreach (int[] i in arr3)
            {
                foreach (int j in i)
                {
                    Console.WriteLine(j);
                }
            }
(4)一维数组中的二维数组
           int[][,] arr4 = new int[3][,];
            arr4[0] = new int[,]{{1,2,3},{4,5,6}};
            arr4[1] = new int[,]{{7,8,9},{10,11,12}};
            arr4[2] = new int[,]{{13,14,15},{16,17,18}};
            foreach (int[,] i in arr4)
            {
                foreach (int j in i)
                {
                    Console.Write(j);
                }
                Console.WriteLine();
            }