委托机制
2016-09-12 16:11
253 查看
1)理解
委托实际上就是“命令”,比如“小明委托小张去买火车票”,也就是“小明命令小张去买火车票”。也就是说的是,对于委托者来说,他是什么也不做的,他只是一个命令的发出者,而被委托者,则是执行委托者所发出的命令。
通过委托实现窗体回传值,就是实现一个解决方案中两个窗体实现相互传值,实现的方法就是将相应的委托对象借助构造方法来实现相应的实现。
2)实例中理解委托机制
==>定义委托
delegate void HandleInterfaceUpdateDelegate(string text); 使用关键字delegate进行声明表示这是一个委托,并表示每个委托的实例都包含一个方法的细节,并且该方法带有一个string类型的参数,比如eat(string
food),不能传入eat()这类方法。
==> 实例化委托对象
HandleInterfaceUpdateDelegate interfaceUpdateHandle;
interfaceUpdateHandle = new HandleInterfaceUpdateDelegate(UpdateTextBox);
private void UpdateTextBox(string text)
{
contentN2.Text = text;
}
实质上,创建委托并实例化委托对象,和创建普通的类并创建类对象的原理是一样的。可以看出的是,创建委托对象时,传入的是某一个方法名,而在委托中,则是存储的是需要操作的方法地址。
3)执行
this.Invoke(interfaceUpdateHandle,
new string[] {
Encoding.Unicode.GetString(readBuffer) });
此时委托已经被附上了具体的方法。
实例:
==> 准备工作
新建一个解决方案,在这个解决方案中,通过新建项目选项,分别创建三个项目,其中包括两个“控制台项目01、02”和一个“类库项目”。(此时自己创建了一个类库,当其他项目想要使用这个类库项目中的方法,必须要将这个类库项目引用到相应的项目中)
==>代码
1) 结果最终实现
其中控制台01项目输出字符串“今天天气不错!”,而控制台02项目输出当前时间。
2) 方案实现
最简单的方法实现就是在类库中创建两个方法,一个是“console.writeline(“今天天气不错!”);”,另一个方法则是“console.writeline(“时间{0}”,DateTime.Now.toString());”。对于这个简单的问题使用这个方法实现是没有问题的,这只是两个需求,如果是存在着200个这样的需求,而对于类库而言,它就是一个共享库,如果每次都要进行改动,那么对于整体项目是没有好处的,因此,对于类库而言,只是实现化简,不能增加负担。
3) 使用委托模式实现
==>定义委托
创建委托和创建类是一样的,如public delegate void aa();只是对于委托是没有方法体的。
==>代码
控制台01:
namespace _01委托
{
class Program
{
static void Main(string[] args)
{
DeleteLibrary.Class1 delete =new DeleteLibrary.Class1();
delete.deleDemo = method1;
delete.aa();
Console.Read();
}
static void method1()
{
Console.WriteLine("当前时间是{0}",DateTime.Now.ToString());
}
}
}
控制台02:
namespace _02委托
{
class Program
{
static void Main(string[] args)
{
DeleteLibrary.Class1 delete =new DeleteLibrary.Class1();
delete.deleDemo = method2;
delete.aa();
Console.Read();
}
static void method2()
{
Console.WriteLine("今天天气不错");
}
}
}
公共类库:
namespace DeleteLibrary
{
public class Class1
{
public aaDelegate deleDemo;
public void aa()
{
Console.WriteLine("******************");
Console.WriteLine("******************");
if (deleDemo !=
null)
{
deleDemo();
}
Console.WriteLine("******************");
Console.WriteLine("******************");
}
}
}
委托:
namespace DeleteLibrary
{
public delegate void aaDelegate();
}
委托实际上就是“命令”,比如“小明委托小张去买火车票”,也就是“小明命令小张去买火车票”。也就是说的是,对于委托者来说,他是什么也不做的,他只是一个命令的发出者,而被委托者,则是执行委托者所发出的命令。
通过委托实现窗体回传值,就是实现一个解决方案中两个窗体实现相互传值,实现的方法就是将相应的委托对象借助构造方法来实现相应的实现。
2)实例中理解委托机制
==>定义委托
delegate void HandleInterfaceUpdateDelegate(string text); 使用关键字delegate进行声明表示这是一个委托,并表示每个委托的实例都包含一个方法的细节,并且该方法带有一个string类型的参数,比如eat(string
food),不能传入eat()这类方法。
==> 实例化委托对象
HandleInterfaceUpdateDelegate interfaceUpdateHandle;
interfaceUpdateHandle = new HandleInterfaceUpdateDelegate(UpdateTextBox);
private void UpdateTextBox(string text)
{
contentN2.Text = text;
}
实质上,创建委托并实例化委托对象,和创建普通的类并创建类对象的原理是一样的。可以看出的是,创建委托对象时,传入的是某一个方法名,而在委托中,则是存储的是需要操作的方法地址。
3)执行
this.Invoke(interfaceUpdateHandle,
new string[] {
Encoding.Unicode.GetString(readBuffer) });
此时委托已经被附上了具体的方法。
实例:
==> 准备工作
新建一个解决方案,在这个解决方案中,通过新建项目选项,分别创建三个项目,其中包括两个“控制台项目01、02”和一个“类库项目”。(此时自己创建了一个类库,当其他项目想要使用这个类库项目中的方法,必须要将这个类库项目引用到相应的项目中)
==>代码
1) 结果最终实现
其中控制台01项目输出字符串“今天天气不错!”,而控制台02项目输出当前时间。
2) 方案实现
最简单的方法实现就是在类库中创建两个方法,一个是“console.writeline(“今天天气不错!”);”,另一个方法则是“console.writeline(“时间{0}”,DateTime.Now.toString());”。对于这个简单的问题使用这个方法实现是没有问题的,这只是两个需求,如果是存在着200个这样的需求,而对于类库而言,它就是一个共享库,如果每次都要进行改动,那么对于整体项目是没有好处的,因此,对于类库而言,只是实现化简,不能增加负担。
3) 使用委托模式实现
==>定义委托
创建委托和创建类是一样的,如public delegate void aa();只是对于委托是没有方法体的。
==>代码
控制台01:
namespace _01委托
{
class Program
{
static void Main(string[] args)
{
DeleteLibrary.Class1 delete =new DeleteLibrary.Class1();
delete.deleDemo = method1;
delete.aa();
Console.Read();
}
static void method1()
{
Console.WriteLine("当前时间是{0}",DateTime.Now.ToString());
}
}
}
控制台02:
namespace _02委托
{
class Program
{
static void Main(string[] args)
{
DeleteLibrary.Class1 delete =new DeleteLibrary.Class1();
delete.deleDemo = method2;
delete.aa();
Console.Read();
}
static void method2()
{
Console.WriteLine("今天天气不错");
}
}
}
公共类库:
namespace DeleteLibrary
{
public class Class1
{
public aaDelegate deleDemo;
public void aa()
{
Console.WriteLine("******************");
Console.WriteLine("******************");
if (deleDemo !=
null)
{
deleDemo();
}
Console.WriteLine("******************");
Console.WriteLine("******************");
}
}
}
委托:
namespace DeleteLibrary
{
public delegate void aaDelegate();
}
相关文章推荐
- [Kotlin]Kotlin学习笔记(三):Null检查机制及lateinit与by lazy(委托机制)的应用
- IOS学习笔记(3)——设计模式之委托机制
- Java虚拟机JVM学习05 类加载器的父委托机制
- 黑马程序员--05.类加载器--04【应用程序默认类加载器】【验证类加载器委托机制】
- .Net 机制下委托(一) 事件委托
- 【Unity3D技巧】在Unity中使用事件/委托机制(event/delegate)进行GameObject之间的通信 (二) : 引入中间层NotificationCenter
- 什么是.Net的异步机制(委托Delegate) - step 1
- 转载 C++实现的委托机制
- .Net的异步机制(委托Delegate) - step 1
- C#/.NET中委托和事件的机制和应用
- jvm原理(6)类加载器双亲委托机制详解
- 10.1 类加载器的委托机制
- .Net 机制下委托(一) 事件委托
- C++实现委托机制(二)
- jvm 类加载机制双亲委托机制
- 实现C++中的事件委托机制
- 【Unity3D技巧】在Unity中使用事件/委托机制(event/delegate)进行GameObject之间的通信
- JVM学习-ClassLoader的父类委托机制
- 理解JavaScript中的事件路由冒泡过程及委托代理机制
- 父类委托机制详解(全盘负责委托机制 )