复杂类型知识点和思考练习,及书里发现的错误

知识点

枚举enmu:是一组已命名的数值常量(元素必须是整型),为一组在逻辑上密不可分的整数值提供便于记忆的符号。
先要在类中声明枚举类型,然后才能象其他类型那样使用该类型。枚举类型的变量在一个时刻只能取枚举中的某一个元素的值。
默认情况下,枚举的基础类型为int,默认值第一个为0,可以通过 emnu 枚举类型名 : long{...}的方式将基础类型改为其他类型的整型。
改变枚举元素的值可以在申明时,对枚举元素进行赋值。在编程时,逻辑上可以将枚举变量当做整型使用,只不过这些变量的值不经过转换是不可以直接和int等类型变量发生关联和使用的。

数组:是使用类型声明的,如 int[] strArr=new int[5];
数组中的元素除了基本数据类型外,还可以是struct,enum和类类型。

 

思考练习

枚举

using System;
namespace ComplexType
{
    public class ComplexTypeEnum
    {
        enum WeekDays { Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday };
        enum Range : long { MinInt32 = -2147483648, MaxInt32 = 2147483647 }
        static void Main()
        {
            WeekDays weekday1;
            weekday1 = WeekDays.Sunday;
            int d = (int)weekday1;
            //int d=(int)weekday1.Sunday;//这种写法是错的,因为变量只代表一个枚举中的元素值。
            //Console.WriteLine(weekday.Tuesday);//这种写法是错的,因为变量只代表一个枚举中的元素值。
            Console.WriteLine(WeekDays.Monday);//就显示“Monday”
            Console.WriteLine(weekday1);
            Console.WriteLine(d);
            Console.ReadLine();
            for (WeekDays dayVal = WeekDays.Monday; dayVal <= WeekDays.Sunday; dayVal++)//也可以用在循环语句里!
            {
                Console.WriteLine(dayVal);
                Console.ReadLine();
            }
            Range rangeMin = Range.MinInt32, rangeMax = Range.MaxInt32;
            long x = (long)rangeMin, y = (long)rangeMax;
            Console.WriteLine("The max value is {0}", y);
            Console.WriteLine("The min value is {0}", x);
            Console.ReadLine();
        }
    }

}

数组

using System;
namespace ComplexType
{
    public class ComplexTypeArray
    {
        enum WeekDays { Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday };
        static void Main()
        {
            /*
            int[] i;
            i=new int[5];到这都是对的,这时赋值一般都用循环语句进行数组内各元素进行赋值。
            i={1,2,3,4,5};不能这样写,已经new,但同时没有初始化的数组,不能直接用{}进行初始化,可以改成下面的方式,就可以了
            i=new int[]{1,2,3,4,5};
            */

            int[] ii = new int[7];//仅写成 “int[] ii;”时,是没有赋值给数组的,写成“int[] ii=new int[7];”后,所有元素都被赋值0
            Console.WriteLine(ii[6]);
            int[] i ={ 1, 2, 3, 4, 5 };//这是正确的
            int[] j = new int[] { 1, 2, 3, 4, 5 };//一般写法
            /*下一行写法也是错的,直接用{}进行赋值,只能在刚定义数组变量时才可,如:int[] i={1,2,3,4,5};
            int[] i;i={1,2,3,4,5};
            */
            //多维数组
            int[,] k = new int[2, 3];
            WeekDays[] weekDayArr0 = new WeekDays[7];//此时已赋值,默认均为枚举的第一个元素的值
            Console.WriteLine(weekDayArr0[5]);
            WeekDays[] weekDayArr = new WeekDays[] { WeekDays.Friday, WeekDays.Monday, WeekDays.Thursday, WeekDays.Monday, WeekDays.Friday, WeekDays.Sunday };
            for (int p = 0; p <= 5; p++)
            {
                Console.WriteLine(weekDayArr[p]);
            }
            Console.ReadLine();

            int[] testForeach = new int[] { 1, 2, 3, 4, 5, 6, 7 };
            int n = 0;
            foreach (int foreachUnit in testForeach)
            {
                int m;
                if (n < 2) { n += 1; goto L2; }
                else goto L1;
            L1: m = 0;//将声明放在里面,m每次循环都被声明,每次都被初始化为0,上次循环的内容已经没有了,goto 的标签所包含的内容不能最好不要放声明的内容,即不要放如:int m;的内容,因为即使各条跳转语句经过的路线都不重复或相交,各条跳转的标签处有同样的申明语句,如同样的int m;看上去,好像不同的运行路线,但在循环体内是不允许一个循环周期内同时申明同样的变量的,哪怕这个申明的动作在实际程序运行中并不会重复!
                goto L3;
            //L1:m+=1;
            L2: m = 1;
            L3: Console.WriteLine("testForeach[{0}] is {1}", m, foreachUnit);
            }

            Console.ReadLine();
        }
    }

}

书内错误

P44页,中间一行的代码 int d=…写的是错的

posted on 2009-09-19 19:36  友闻语上  阅读(192)  评论(0编辑  收藏  举报