面向对象(委托)

委托:
也称为代理,事件也是一种委托;
定义在类的最外面

1、定义委托
关键字:delegate
函数签名:签名和函数保持一致
定义委托的时候要根据函数来定义
public delegate int First(int a,int b);
指向的方法的返回类型,需要参数必须一致!

2、定义委托变量,指向方法

委托不能被实例化,因为不是类;

First f = new JiaFa; //新建委托变量,指向方法,注意!!方法不需要小括号!!

第二次可以使用+=

public int JiaFa(int a,int b)
{
return a+b;
}

调用:
f(5,3);

可以理解为函数的指针,委托指向哪个函数,则这个委托就代表哪个函数
可以让函数当做参数一样进行传递

 

 

复制代码
  1 using System;
  2 using System.Collections.Generic;
  3 using System.Linq;
  4 using System.Text;
  5 using System.Threading.Tasks;
  6 
  7 namespace ConsoleApplication1
  8 {
  9     //单列模式
 10     //控制一个类只能实例化一个对象
 11 
 12     //class Test
 13     //{
 14     //    public string name;
 15     //}
 16 
 17     //数据访问类
 18     class DBDA
 19     {
 20         public string host;
 21         public string database;
 22 
 23         //静态成员,用来存储该类的对象
 24         public static DBDA db = null;
 25 
 26         //让该类不能被实例化
 27         private DBDA()
 28         {
 29         }
 30 
 31         //提供一个造对象的方法,控制只能造一个对象
 32         public static DBDA DuiXiang()
 33         {
 34             if (db == null)
 35             {
 36                 db = new DBDA();
 37             }
 38 
 39             return db;
 40         }
 41     }
 42 
 43     //定义委托
 44     public delegate void SuiBian(string s);
 45 
 46     class Program
 47     {
 48         static void Main(string[] args)
 49         {
 50            // Test t1 = new Test();
 51            //Test t2 = new Test();
 52 
 53             //DBDA db = DBDA.DuiXiang();
 54             //db.host = "localhost";
 55             //DBDA db1 = DBDA.DuiXiang();
 56 
 57 
 58             //委托
 59             //把方法参数化
 60             SuiBian s = China;
 61 
 62             s += America; //+=是绑定方法  -=去掉一个方法
 63 
 64             //事件
 65             //事件就是一种特殊的委托
 66 
 67 
 68             //调用语音方法
 69             Speak(s);
 70 
 71            
 72 
 73             Console.WriteLine();
 74             Console.ReadLine();
 75 
 76 
 77             //面向对象三大特性
 78             //设计模式
 79         }
 80 
 81         //语音功能的方法
 82         static void Speak(SuiBian yu)
 83         {
 84             yu("张三");
 85 
 86             //if (n == 0)
 87             //{
 88             //    America();
 89             //}
 90             //else if (n == 1)
 91             //{
 92             //    China();
 93             //}
 94             //else if (n == 2)
 95             //{
 96             //    HanYu();
 97             //}
 98     
 99         }
100 
101         //语音包
102         public static void America(string s)
103         {
104             Console.WriteLine(s+"hello");
105         }
106         public static void China(string s)
107         {
108             Console.WriteLine(s+"你好");
109         }
110         public static void HanYu(string s)
111         {
112             Console.WriteLine(s+"bjdkaj");
113         }
114 
115   
116     }
117 }

转载于:https://www.cnblogs.com/zl1121102942/p/5794303.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值