static void Main(string[] args)
{
/*int i,j;
Method1(10,20,out i ,out j );
Console.WriteLine("{0}and{1}", i, j);*/
/*------------元组------------*/
Tuple<int ,int >result= Method2(10, 20);
//通过Item2来访问元组的成员
//元组可以嵌套创建一个元组 var t1=Tuple.Create(8,9,10)
//var t2=new Tuple<int ,int ,int,int ,int ,int ,int ,int,Tuple<int ,int ,int>>(1,2,3,4,5,6,7,t1);
//前七个使用t2.Item1~t2.Item7访问,后三个使用t2.Rest.Item1~t2.Rest.Item3访问
Console.WriteLine("元组1={0} 元组2={1}", result.Item2, result.Item1);
//?? 运算符调用 null 合并运算符和用于定义可以为 null 的值类型的默认值或引用类型。
//,如果操作数不为空,则返回该左操作数;否则它返回正确的操作数。
int? i = 0;
int x = i ?? 1;//i为null时返回1
Console.WriteLine(x .ToString ());//输出0
Console.Read();
}
//命名参数和可选参数
static void Method1(int s1, int s2,out int x1,out int x2)
{
x1 = s1;
x2 = s2;
}
//使用Tuple对象作为方法的形参或返回值
static Tuple<int, int> Method2(int x, int y)
{
return new Tuple<int, int>(x + y, x * y);
}
//------------委托
public delegate int Method3(int value1, int value2);
Method3 m = delegate(int value1,int value2) {
return value1 + value2;
};
//-------------回调,先创建一个回调对象,然后创建一个控制器,将对象需要被调用的方法告诉控制器对象,
//控制器对象负责检查某个场景是否出现或某个条件是否满足,当次场景出现或条件满足时,自动调用回调对象的方法
//ICallBack接口定义了一个run方法,所有“回调对象”都必须实现此接口,回调对象必须实现此接口
}