C#委托使用案例
假定有两个对象A和B,在A中实例化了对象B,那么A可以访问B中的方法,反过来B不能直接访问A中的方法,所以使用委托。
委托的使用步骤:条件(在A对象中实例化了B)
(1)、在B中声明一个委托原型
(2)、在A中根据委托原型编写所需要的委托方法
(3)、在B中利用声明的委托原型声明一个委托变量
(4)、在A中通过委托变量和委托方法关联
根据面向对象编程原则抽取的类:(1)选秀平台类;(2)嘉宾类;(3)投票器类;(4)投票结果展示类;
图片: ![Alt](using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Vote.Models
{
///
/// 嘉宾类
///
public class Guest
{
public string GuestName { get; set; }//嘉宾姓名
public int GuestId { get; set; }//嘉宾号码
public int VoteCounter { get; set; } = 0;//所得票数
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Vote.Models
{
///
/// 嘉宾选秀的平台
///
public class MyProgramer
{
//创建一组嘉宾
public Dictionary
public MyProgramer()
{
Guests = new Dictionary
[1] = new Guest() { GuestId = 1,GuestName=“山云伟” },
[2]=new Guest() { GuestId=2,GuestName=“韩涛”},
[3]=new Guest() {GuestId=3,GuestName=“张建坤” }
};
}
}
}
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace Vote
{
public partial class FrmMainA : Form
{
Models.MyProgramer objMyProgramer = new Models.MyProgramer();//创建一个嘉宾选秀平台对象
private List
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace Vote
{
public partial class FrmVoteB : Form
{
public event SendMsgDelegate sendMsgDelegate;//委托使用(2)根据委托声明定义一个委托变量
public FrmVoteB()
{
InitializeComponent();
}
public FrmVoteB(int i) : this()
{
this.Text = i + "号投票器";
//委托使用(6)关联事件
this.btn1.Click += new System.EventHandler(this.btn_Click);
this.btn2.Click += new System.EventHandler(this.btn_Click);
this.btn3.Click += new System.EventHandler(this.btn_Click);
}
//委托使用(5)在A中调用B中的方法
private void btn_Click(object sender, EventArgs e)
{
Button btn = (Button)sender;
int num = Convert.ToInt32(btn.Tag);
sendMsgDelegate(num);
//投一次票后禁用投票按键
this.btn1.Enabled=this.btn2.Enabled=this.btn3.Enabled = false;
}
}
//委托使用(1)定义一个委托原型(谁使用谁声明)
public delegate void SendMsgDelegate(int num);//参数为嘉宾号