C#中委托的常规用法
委托的定义及使用方法
namespace 委托
{
class Program
{
static void Main(string[] args)
{
#region MyRegion
////3,定义委托变量
StudyDelegate study = null;
//4,关联委托变量
study += BeginStudy1; //把函数名当成变量来用
study += BeginStudy2;
study += BeginStudy3;
study += BeginStudy4;
//5,使用委托变量
study();
//可以动态的实现增减,+= 是加用,-=是减用
study -= BeginStudy2; //这样方法2就不再执行了。
#endregion
}
#region MyRegion
////2,编写具体方法
static void BeginStudy1()
{
Console.WriteLine("学C#技术1");
}
static void BeginStudy2()
{
Console.WriteLine("学C#技术2");
}
static void BeginStudy3()
{
Console.WriteLine("学C#技术3");
}
static void BeginStudy4()
{
Console.WriteLine("学C#技术4");
}
#endregion
}
//1,声明委托(定义方法的原型 )
public delegate void StudyDelegate();
}
【1】委托是一种数据类型,像类一样的数据类型,一般都是直接在命名空间中定义
【2】定义委托时,需要指明返回值类型,委托名与参数列表,这样就能确定该类型的委托侟什么的方法
【3】使用委托:
3.1 声明委托变量
3.2 委托是一个引用类型,就像类一样,所以当声明委托变量后,如果不赋值则该委托变量为Null,
所以在使用委托变量前最好做非空校验 weituo != null
3.3 委托类型的变量只能赋值一个委托类型的对象。
委托与事件
namespace 委托与事件
{
class Program
{
//int 是委托的返回类型,另一个int是方法类型
delegate int Transformer(int x);
//int 是返回类型,另一个int是方法类型,所以可以用上面定义的委托。
static int Square(int x) => x * x;
static void Main(string[] args)
{
//委托类型 实例 = 函数名
//Transformer t = new Transformer(Square);//原型
Transformer t = Square;
//调用委托
//int resutl = t.Invoke(3); //原型
int resutl = t(3);
Console.WriteLine(resutl);
Console.ReadKey();
}
}
}