C# 中的数组使用关键字 params 进行传递。一个数组类型的参数必须总是函数最右边的参数。只有一个参数可以是数组类型。你可以传送任意数量的元素作为数组类型的参数。看了下面的例子你可以更好的理解:
注意:使用数组是 C# 提供用于可选或可变数量参数的唯一途径。
例子:
复制内容到剪贴板
代码:
void Func(params int[] array)
{
Console.WriteLine("number of elements {0}", array.Length);
}
复制内容到剪贴板
代码:
Func(); // 打印 0
Func(5); // 打印 1
Func(7,9); // 打印 2
Func(new int[] {3,8,10}); // 打印 3
int[] array = new int[8] {1,3,4,5,5,6,7,5};
Func(array); // 打印 8
运算符与表达式
运算符和表达式跟 C++ 中完全一致。然而同时也添加了一些新的有用的运算符。有些在这里进行了讨论。
is 运算符
is 运算符是用于检查操作数类型是否相等或可以转换。is 运算符特别适合用于多态的情形。is 运算符使用两个操作数,其结果是布尔值。参考例子:
复制内容到剪贴板
代码:
void function(object param)
{
if(param is ClassA)
//做要做的事
else if(param is MyStruct)
//做要做的事
}
}
as 运算符
as 运算符检查操作数的类型是否可转换或是相等(as 是由 is 运算符完成的),如果是,则处理结果是已转换或已装箱的对象(如果操作数可以装箱为目标类型,参考 装箱/拆箱)。如果对象不是可转换的或可装箱的,返回值为 null。看看下面的例子以更好的理解这个概念。
复制内容到剪贴板
代码:
Shape shp = new Shape();
Vehicle veh = shp as Vehicle; // 返回 null,类型不可转换
Circle cir = new Circle();
Shape shp = cir;
Circle cir2 = shp as Circle; //将进行转换
object[] objects = new object[2];
objects[0] = "Aisha";
object[1] = new Shape();
string str;
for(int i=0; i&< objects.Length; i++)
{
str = objects as string;
if(str == null)
Console.WriteLine("can not be converted");
else
Console.WriteLine("{0}",str);
}
复制内容到剪贴板
代码:
Output:
Aisha
can not be converted
语句
除了些许附加的新语句和修改外,C# 的语句和 C++ 的基本一致。
以下是新的语句:
foreach
用于迭代数组等集合。
例子:
复制内容到剪贴板
代码:
foreach (string s in array)
Console.WriteLine(s);
lock
在线程中使代码块称为重点部分。
(译注:lock 关键字将语句块标记为临界区,方法是获取给定对象的互斥锁,执行语句,然后释放该锁。lock 确保当一个线程位于代码的临界区时,另一个线程不进入临界区。如果其他线程试图进入锁定的代码,则它将一直等待(即被阻止),直到该对象被释放。)
checked/unchecked
用于数字操作中的溢出检查。
例子: