博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
委托由浅入深学习
阅读量:6814 次
发布时间:2019-06-26

本文共 2611 字,大约阅读时间需要 8 分钟。

 

一,简单例子

using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace SimpleDelegate{    class Program    {        private delegate String getString();        static void Main(String[] args)        {            int delegat = 40;            getString Show = new getString(delegat.ToString);            Console.WriteLine("String is {0}", Show());    //这里Show()等价于调用delegat.ToString();            Console.ReadLine();        }    }}

简单用委托实现输出

 

二,多路广播委托

using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace Delegate{    class Program    {        public delegate void TestDelegate(string str); //定义委托        static void Main(string[] args)        {            //多路广播委托声明时必须返回void,否则返回值不知道应该送回什么地方            Student student = new Student();            Teacher teacher = new Teacher("王四");            TestDelegate testDelegate1 = new TestDelegate(student.StudentName); //实例委托            testDelegate1 += teacher.TeacherName;  //可以指向不同类中的方法            //testDelegate1 += teacher.ClassName; //指向不符的方法错误,由于类型安全性导致,因为teacher.ClassName方法不带参            testDelegate1("张三");            Console.ReadLine();        }        class Student        {            private String name = "";            public Student(String _name)            {                this.name = _name;            }            public Student() { }            public void StudentName(String _name)            {                if (this.name != "")                    Console.WriteLine("学生名:{0}", this.name);                else                    Console.WriteLine("学生名:{0}", _name);            }        }        class Teacher        {            private String name;            public Teacher(String _name)            {                this.name = _name;            }            public void TeacherName(String _name)            {                if (this.name != "")                    Console.WriteLine("老师名:{0}", this.name);                else                    Console.WriteLine("老师名:{0}", _name);            }            public string ClassName()            {                return "语文";            }        }    }}

综上:委托的简介,

1,.NET中的委托是类型安全的

2,委托类型声明的是一个类,实例化为一个对象,分配在堆中

栈:它是一种具有后进先出性质的数据结构,也就是说后存放的先取,先存放的后取。

堆:是一种经过排序的树形数据结构,每个结点都有一个值。通常我们所说的堆的数据结构,是指二叉堆。堆的特点是根结点的值最小(或最大),且根结点的两个子树也是一个堆。由于堆的这个特性,常用来实现优先队列,堆的存取是随意。

栈:由系统自动分配,速度较快。但程序员是无法控制的。

堆:是由new分配的内存,一般速度比较慢,而且容易产生内存碎片,不过用起来最方便。

3,委托的好处,它能使一个对象状态的改变立即通知其他对象,而这个对象和其它的对象是完全分离的,就是互相不知道对方的存在,这样在程序规模变大的情况下更加容易维护(每一个对象的修改不涉及另一个对象),更加容易扩展,也更加灵活。

如:以上代码的两个输出老师和学生名的方法,修改老师的方法并不会影响学生方法。

 

转载于:https://www.cnblogs.com/May-day/p/6004645.html

你可能感兴趣的文章
重载类的 new,delete,new[],delete[] 运算符成员函数
查看>>
Express 3.x升级到4.x 优缺点
查看>>
我的友情链接
查看>>
inittab文件丢失恢复
查看>>
ocjp 51-60
查看>>
我的友情链接
查看>>
windows下的任务不能自动执行的解决办法
查看>>
VACL配置说明
查看>>
shell防DDOS
查看>>
go语言 学习笔记1
查看>>
一键包安装lamp或lnmp环境
查看>>
网络提速(最短路)
查看>>
Spring整合MongoDB实现多个or的范围查询
查看>>
python安装包模块
查看>>
swap内存交换空间构建
查看>>
无标题文章正则表达式
查看>>
存储因管理员策略问题显示脱机解决方法
查看>>
Android Intent Action 大全
查看>>
4412开发板支持GPS高强度信号
查看>>
微信小程序开发-概述
查看>>