C#学习5

常量

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();




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值