今天老师讲了传说中C#最难理解的委托和事件..是有点模糊..回家后赶忙做些练习...拿一个上机题来理解一下委托和事件.
委托的理解其实还是挺简单的.用我们老师的话说就是,让别人去干应该他来做的事情!
委托包含对方法而不是方法名称的引用.使用委托可以在运行时动态设定要调用的方法,不知道方法名称,也可以调用方法执行.但是委托要求方法的实现和委托必须具有相同的方法签名(相同数量和类型的参数)并有相同类型的返回值.
构造委托需要三个步骤
一.定义委托
一.定义委托:
[访问修饰符] delegate 返回类型 委托名();
例:
class Delegates
{
public delegate int Call(int num1,int num2); //定义一个委托
}
这样就定义了一个委托,它有一个int的返回值,两个int型的参数;
二.实例化委托
实例化委托也就是将委托设定到要执行的方法上..要保证这个方法和委托具有相同的方法签名还要有相同类型的返回值,
我们来继续完善上边的例子
public class Delegates
{
public delegate int Call (int num1,int num2); //定义一个委托
class Math
{
public int Multiply(int num1,int num2) //定义两个方法,和委托具有相同的方法签名
{
//实现
}
public int Divide(int num1,int num2)
{
//实现
}
}
class TestDelegates
{
static void Main()
{
Call objCall;
Math objMath = new Math();
//实例化委托
objCall = new Call(objMath.Multiply); //实现委托objCall执行Multiply方法
}
}
}
Main()方法的第一行定义一个委托对象objCall 但是并没有实例化,在下一行中,定义并实例化一个Math的实例 objMath ,这个对象现在包含有Multiply和Divide两个方法,接下来我们通过将方法名和对象objMath传递给委托对象objCall的构造函数, 让他与 objMath 的Muliply方法关联起来...
三.调用委托
调用委托也就是实例化委托的方法,调用委托与调用方法相识,区别在于不是调用委托的实现(委托是不能实现的),而是调用与委托关联的方法的实现代码...让我们来看一下最终实现的代码:
using System;
namespace Example
{
public class Delegates
{
public delegate int Call (int num1,int num2);
class Math
{
public int Multiply(int num1,int num2)
{
return num1 * num2;
}
public int Divide(int num1,int num2)
{
return num1 / num2;
}
}
class TestDelegates
{
static void Main()
{
Call objCall;
Math objMath = new Math();
//实例化委托
objCall = new Call(objMath.Multiply);
//调用委托
int result;
result = objCall(5,3);
Console.WriteLine("结果为{0}",result);
}
}
}
}
没想到写点东西这么累啊..现在知道那些写书的人是多么的辛苦了......事件要比委托难理解多了,看来我是没这个耐心一点点写了.直接把我的源码帖上来好了..如果有什么问题可以给我留言.尽力帮大家解决!
代码在下一篇文章中发布.
委托的理解其实还是挺简单的.用我们老师的话说就是,让别人去干应该他来做的事情!
委托包含对方法而不是方法名称的引用.使用委托可以在运行时动态设定要调用的方法,不知道方法名称,也可以调用方法执行.但是委托要求方法的实现和委托必须具有相同的方法签名(相同数量和类型的参数)并有相同类型的返回值.
构造委托需要三个步骤
一.定义委托
二.实例化委托
三.调用委托
一.定义委托:
[访问修饰符] delegate 返回类型 委托名();
例:
class Delegates
{
public delegate int Call(int num1,int num2); //定义一个委托
}
这样就定义了一个委托,它有一个int的返回值,两个int型的参数;
二.实例化委托
实例化委托也就是将委托设定到要执行的方法上..要保证这个方法和委托具有相同的方法签名还要有相同类型的返回值,
我们来继续完善上边的例子
public class Delegates
{
public delegate int Call (int num1,int num2); //定义一个委托
class Math
{
public int Multiply(int num1,int num2) //定义两个方法,和委托具有相同的方法签名
{
//实现
}
public int Divide(int num1,int num2)
{
//实现
}
}
class TestDelegates
{
static void Main()
{
Call objCall;
Math objMath = new Math();
//实例化委托
objCall = new Call(objMath.Multiply); //实现委托objCall执行Multiply方法
}
}
}
Main()方法的第一行定义一个委托对象objCall 但是并没有实例化,在下一行中,定义并实例化一个Math的实例 objMath ,这个对象现在包含有Multiply和Divide两个方法,接下来我们通过将方法名和对象objMath传递给委托对象objCall的构造函数, 让他与 objMath 的Muliply方法关联起来...
三.调用委托
调用委托也就是实例化委托的方法,调用委托与调用方法相识,区别在于不是调用委托的实现(委托是不能实现的),而是调用与委托关联的方法的实现代码...让我们来看一下最终实现的代码:
using System;
namespace Example
{
public class Delegates
{
public delegate int Call (int num1,int num2);
class Math
{
public int Multiply(int num1,int num2)
{
return num1 * num2;
}
public int Divide(int num1,int num2)
{
return num1 / num2;
}
}
class TestDelegates
{
static void Main()
{
Call objCall;
Math objMath = new Math();
//实例化委托
objCall = new Call(objMath.Multiply);
//调用委托
int result;
result = objCall(5,3);
Console.WriteLine("结果为{0}",result);
}
}
}
}
没想到写点东西这么累啊..现在知道那些写书的人是多么的辛苦了......事件要比委托难理解多了,看来我是没这个耐心一点点写了.直接把我的源码帖上来好了..如果有什么问题可以给我留言.尽力帮大家解决!
代码在下一篇文章中发布.