漫谈C#之关键字(1)
每一种语言都有非常多的关键字,而且这些关键字也都大同小异,不过毕竟还是有些许的不一样。有些关键字大家碰到的多了,自然就熟悉了,但是有些关键字用得不大多,或者是新引入的,所以就不大熟悉了。我平常在用的时候,就是会碰到一些关键字,感觉有点生疏,平常也会把这些我不懂的关键字的用法了解一下并记录下来。想到应该也有很多跟我同样的人,所以就把我的记录跟大家分享一下。请各位tx多多指正!
访问关键字
base:用于派生类中访问基类的成员
转换关键字
explicit:用于声明用户定义的显式类型转换运算符
implicit:用于声明用户定义的隐式转换运算符
一般情况下,调用某一个隐式转换时,应当绝不会引发异常,并且不会造成信息丢失。否则,应将其标记为explicit。
方法参数关键字
如果声明方法的参数时没有指明ref或out,该参数将具有与该方法相关的值。这个值在方法中能被更改,但是当程序返回到调用过程时,这种改动不会被保留。
params:用于指定在参数数目可变时带有参数的方法参数
在方法声明中的params关键字之后不允许引入任何其他参数,但在其前面可以有其他参数。而且在方法声明中只允许使用一个params关键字。
ref参数的值将被传递到ref参数,故必须首先初始化;而out参数不然,它的值不会被传递到该out参数,故不必首先初始化,但它必须在方法返回以前为out参数赋值。
属性不是变量,不能作为ref/out参数。
访问关键字
base:用于派生类中访问基类的成员
- 调用基类上已被其他方法重写的方法
1 public override void GetInfo()
2 {
3 base.GetInfo(); // 调用基类上的GetInfo方法
4 } - 指定创建派生类实例时应用的基类构造函数
1 public MyDerived() : base() // 调用基类的构造函数
2 {}
转换关键字
explicit:用于声明用户定义的显式类型转换运算符
1 class MyType
2 {
3 public static explicit operator MyType(int i)
4 {
5 // 从int转换到MyType类型的代码
6 }
7 }
显式转换运算符必须通过类型转换调用2 {
3 public static explicit operator MyType(int i)
4 {
5 // 从int转换到MyType类型的代码
6 }
7 }
1 int i;
2 MyType x = (MyType)i; // int到MyType类型的转换需要进行类型转换
如果转换操作可能导致异常或信息丢失,则应用explicit关键字标记它。2 MyType x = (MyType)i; // int到MyType类型的转换需要进行类型转换
implicit:用于声明用户定义的隐式转换运算符
1 class MyType
2 {
3 public static implicit operator int(MyType m)
4 {
5 // 从MyType转换到int类型的代码
6 }
7 }
2 {
3 public static implicit operator int(MyType m)
4 {
5 // 从MyType转换到int类型的代码
6 }
7 }
1 MyType x;
2 int i = x; // 隐式地调用MyType的MyType到int类型的转换运算符
隐式转换可以通过消除不必要的类型转换来提高源代码的可读性。2 int i = x; // 隐式地调用MyType的MyType到int类型的转换运算符
一般情况下,调用某一个隐式转换时,应当绝不会引发异常,并且不会造成信息丢失。否则,应将其标记为explicit。
方法参数关键字
如果声明方法的参数时没有指明ref或out,该参数将具有与该方法相关的值。这个值在方法中能被更改,但是当程序返回到调用过程时,这种改动不会被保留。
params:用于指定在参数数目可变时带有参数的方法参数
在方法声明中的params关键字之后不允许引入任何其他参数,但在其前面可以有其他参数。而且在方法声明中只允许使用一个params关键字。
1 public static void UseParams(params int[] list)
2 {
3 for(int i = 0; i < list.Length; i++)
4 {
5 Console.WriteLine(list[i]);
6 }
7 }
8
9 public static void Main()
10 {
11 UseParams(1,2,3);
12 int[] myArray = new int[3] { 10,11,12 };
13 UseParams(myArray);
14 }
ref、out 使方法可以引用传递到该方法的那一个变量,当程序转至调用方法时,在方法中对参数所做的任何改动都将传给该变量。2 {
3 for(int i = 0; i < list.Length; i++)
4 {
5 Console.WriteLine(list[i]);
6 }
7 }
8
9 public static void Main()
10 {
11 UseParams(1,2,3);
12 int[] myArray = new int[3] { 10,11,12 };
13 UseParams(myArray);
14 }
ref参数的值将被传递到ref参数,故必须首先初始化;而out参数不然,它的值不会被传递到该out参数,故不必首先初始化,但它必须在方法返回以前为out参数赋值。
属性不是变量,不能作为ref/out参数。
汇聚杭州外卖:外卖汇