C#学习记录2——语言基础

第二部分关于c#语言的一些基础,大部分学过Java,C++的就差不多,so我就只写写C#里面特有的了

1.输出语句带参数列表

    其实就是上一节里面的那个System.Console.WriteLine()方法,C#为这个方法提供了一个很灵活的输出形式

1 System.Console.WriteLine("myInt : {0}, myInt1 : {1}", myInt, myInt1);

    很简单,就是在双引号里面用大括号{}和参数index来代表后面的参数列表;实例中:{0}表示myInt,{1}表示myInt1

    不过有几点需要注意:一个是保证myInt和myInt1在前面已经被声明并且赋值,否则不能通过编译。

          另一个就是要保证{}里面的数不要超过后面参数和列表的有效范围(从0开始)。

 

2.有关调试和运行

    如果直接通过调试然后直接运行程序,你会发现程序运行之后直接就退出,没有时间查看结果。

    解决方法就是,在程序的结尾加入一句话

Console.ReadKey();

    它将使程序在此暂停等待用户输入任意一个字符。

3.枚举类型

    这个在其他语言里面也有,不过C#里面有一些区别

   class Program
    {
        enum ClothSize  : uint
        {
            Small = 1,
            Large = 2,
        }
        static void Main(string[] args)
        {
            System.Console.WriteLine("Size: {0}",ClothSize.Large);
            System.Console.WriteLine("Size2: {0}", (uint)ClothSize.Small);
            Console.ReadKey();
        }
    }

    通过枚举声明了一种称为ClothSize的类型,来表示衣服的尺码。:unit表示它的基类型,也就是里面是使用unit(即unsigned int)表示。这里如果不说明的话则默认为是int,并且这里不可以使用char!!!一定注意。

    例外枚举的声明要在任何方法之外,作为类里面的一个成员变量存在,如果将其写在例如Main()的方法里面是不可以的。做好准备之后,可以调试运行了

 

    结果如上图。这里体现了枚举值得两种表现形式。如果不加说明,默认的将使用其符号名,也就是枚举声明时使用的名字(如Large,Small);如果想使用枚举常量的值(具体的1或2等等),需要通过类型转换,在前面加上(unit)等。

3.判断语句

    在if,while,do_while,for等语句里面包含了一个判断语句,如果之前习惯使用其他的语言,那么可能已经养成了一个习惯,就是用0和非0这样的表示方法代替true或false。这种方法在C#里面是不允许的。C#里面所有的判断语句必须使用返回值为布尔类型的语句。这样做保证不会出现一些没有注意到的错误。例如,常见的if( temp = 2)。本意是使用==,这样一个=会返回2这个值,如果是在其他语言里是能够通过的,但是C#会保证进行提醒,要求更正。

4.switch语句

    C#里面的switch语句,不允许在某一case不是空的情况下继续向下进行。不过既然这个case里面没有任何动作,何必加它呢·······

    如果希望进行某一个case之后转换到其他的case,使用goto。<但是强烈不建议,会使程序变得很难读,转来转去的@@>

5.foreach语句

    这个在java里面有,C++11里面也添加了。但是还是特别的说一下。

    

 1             int[] arr = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11 };
 2             foreach (int num in arr)
 3             {
 4                 System.Console.Write(num + " ");
 5             }
 6             Console.WriteLine("遍历"); 7             Console.ReadKey();();

    通过foreach对数组进行遍历。这里说一个要注意的事情,writeline()里面通过+来将两段文字组合,要注意如果只是想添加一个空格隔开,一定要用双引号“ ”将空格包起来。如果用单引号‘ ’,那么根据引号之外的类型:如果是可以转换成int型的,例如char,那么会把两部分都转换成int(空格的int为32),然后两部分相加;如果不能转换成int,例如string,那么就会被当成空格输出。所以为了保证是空格,使用双引号更保险。

    另外,不能通过foreach对in前面的变量进行赋值等改变,例如

1             foreach (int num in arr)
2             {
3                 num--;
4             }
5             Console.WriteLine("遍历");

    这样是会出现错误的。可以理解为,num只是一个引用变量(C/C++里面概念),即通过指针进行访问,改变它也没有任何意义。

    ~~~!!!求更详细的解释!!!~~~

    下面一个尝试在foreach里面对arr数组进行改变

        static void Main(string[] args)
        {
            int [] arr= {1,2,3,4,5,6,7,8,9,10};
            int temp =0;
            Console.WriteLine("声明数组后");
            foreach (int num in arr)
            {
                System.Console.Write(num + " ");
            }
            Console.WriteLine("\n下面再foreach里面尝试改变arr数组");
            foreach (int num in arr)
            {
                System.Console.Write(num  + " ");
                arr[temp]++;
                temp++;
                System.Console.Write(num + " ");
            }
            Console.WriteLine("\n尝试改变之后的数组");
            foreach (int num in arr)
            {
                System.Console.Write(num + " ");

            }
            Console.WriteLine();
            Console.ReadKey();
        }

 

 

    注意看到,在第二个foreach语句中,是能够对arr数组里面的值进行修改的,也就是说这个集合是实实在在存在的,可以对它操作。但是in前面的这个num还是不会变。

    ~~~~!!!求解释!!!~~~~

6.short circuit evaluation

    中文为“短路测试”。其实所有语言都有,但是因为当时我学的时候就有点不理解,所以在这还是说一说。

    这个短路主要是指在AND与,和OR或判断时,可以只判断前面一个,而忽略后面一个。

    if( (x !=null) && (x.instance>=50))

    这个AND判断,如果第一句返回false,就会跳过后面第二句话的判断。

    if( (x == null) || (x.instance<50))

    这个OR判断和上面相反,如果第一句为true就不会进行后面一句了    

    这样做的好处是,有时后一句话的判断要建立在第一句成立的情况下,否则会出项异常。

    向上述的两个例子,如果x是空,那么久不应该再进一步对它的成员变量进行判断,否则会出NullPointerException

posted on 2015-03-23 17:33  DennisWong  阅读(168)  评论(0编辑  收藏  举报