C#学习5

来源:互联网 发布:淘宝万能评价语 编辑:程序博客网 时间:2024/06/01 08:45

常量

const 类型名 变量名 = 数值;  在定义时赋值,其他地方不能赋值。


枚举

定义一种枚举类型,并且在定义这种类型是要指定这个类型的所有值。

语法: enum   自己起的类型名  { 写我们这种类型都有哪些值  值1,值2,... ,值n}

枚举的定义一般和类定义在用一个级别,这样这个命名空间下所有的类都能使用。方法中、类中也可以。

作用 : 1 限制用户不能随意赋值,只能在定义的枚举值中选择;2 不用死记值,用 . 选择值;

定义枚举是,值不能是int类型

枚举类型都可以强制转换为int 类型;枚举值在定义的时候已经默认有值,编号从0开始;也可以把第一个定义为其他值,后面值递增1;

如何把一个字符串转化为一个枚举类型

(自己定义的枚举类型) (Enum.Parse(typeof(自己定义的枚举类型),"待转换的字符串");


命名参数 : 只要显示指定参数的名字就可以图任意顺序在方法调用中列出实参

调用的时候可以既有位置参数也有命名参数,但在这种情况下位置参数要先列出。

public int  calc(int a, int b, int c){    ....} int r0 = calc(4,3,2); int r1 = calc(c: 2,b:3,a:4); int r3 = calc (4,c:2,b:3);

可选参数 : 在调用方法的时候可以包含这个参数也可以省略他

为了表明某个参数是可选的,需要在方法的声明的时候为参数提供默认值。只有值参数类型可以作为可选参数类型。所有必填参数必须在可选参数声明之前声明。如果有paras参数,必须在所有可选参数之后声明。

public int calc ( int x, decimal y ,...int a=3, double b = 15, ... params int[] intvals )// 顺序 : 必填参数,可选参数,params参数
必须从可选参数列表的最后开始省略,直到列表开头,也就是只可以省略最后n个参数,不可以随便选择省略任意的参数。

栈帧 : 调用方法时,内存从栈顶开始分配,保存和方法关联的一些数据项,这块内存叫做栈帧(stack frame)

包含内容:返回地址,也就是在方法退出的时候继续执行的位置。

                    这些参数分配的内存,也就是方法的值参数,或者还可能是参数数组9如果有)

                    各种和方法调用相关的其他管理数据项。

方法调用时整个栈帧会压入栈。方法退出时,整个栈帧都会从栈上弹出。弹出栈帧也叫栈展开(unwind)


分部类 partial

每个分部类的声明都含有一些类成员的声明; 类的分部类声明可以在同一文件中也可以在不同文件中;组成类的所有分部类 都必须在一起编译;

分部方法 : 声明在分部类中不同部分的方法。

1) 返回类型必须是void; 2)不能包含访问修饰符,即必须是私有的。3)参数列表不能有out参数;4)必须有关键字partial 放在void之前。

partial class Class2    {        //因为partial 是私有的,不能从类外调用,所以方法 public add 是调用printsum 的方法        partial void PrintSum(int x, int y); //定义分布方法        public void add(int x, int y)        {            PrintSum(x, y);        }    } 


 partial class Class2    {        partial void PrintSum(int x, int y)        {            Console.WriteLine(" the sum is {0}", x + y); // 实现分部方法            Console.ReadKey();        }    }

class Program    {        static void Main(string[] args)        {            var mc = new Class2();            mc.add(5, 6);        }    }
最后输出 the sum is 11;


数组

 class Class3    {        public int var = 0;    }

 //  int[] arr = new int[] { 1, 2, 3 };          //  foreach (int item in arr)           //     item++; // 错误,不能改变迭代变量值            Class3 [] classarray = new Class3[4];            for (int i = 0; i < 4; i++)            {                classarray[i] = new Class3(); //别忘了这里还要new 一次                classarray[i].var = i;            }            foreach (Class3 item in classarray)                item.var += 10;  //正确不能改变迭代变量的引用,但可以通过迭代变量改变数据            foreach (Class3 item in classarray)                Console.WriteLine("{0}", item.var);            Console.ReadKey();      
交错数组与巨型数组;

在CIL中一维数组有特定的指令用于性能优化。矩形数组没有这些指令,并且不能再相同级别进行优化。因此,有时使用一维数组(可以被优化)的交错数组比矩形数组(不能被优化)更有效率。另一方面,矩形数组的编程复杂度要小得多,因为他会被作为一个单元而不是数组的数组。 

foreach 交错数组示例

 int total = 0;            int [][] arr4 = new int [2][];            arr4[0] = new int[] { 1, 2 };            arr4[1] = new int []{3,4};            foreach (int[] i in arr4)            {                Console.WriteLine("Starting the new array");                foreach (int j in i)                {                    total += j;                    Console.WriteLine("item is {0}, total is {1}", j, total);                }            }            Console.ReadKey();




0 0
原创粉丝点击