您的位置:首页 > 编程语言 > C#

C#学习5

2014-01-07 19:27 183 查看
常量

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();
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: