public class UserEventArgs : EventArgs
{
public readonly string emailAddress;
public readonly string mobilePhone;
public readonly string amount;
public UserEventArgs(string emailAddress, string mobilePhone,string amount)
{
this.emailAddress = emailAddress;
this.mobilePhone = mobilePhone;
this.amount = amount;
}
}
class BankAccount
{
//声明一个处理银行交易的委托
public delegate void ProcessTranEventHandler(object sender, UserEventArgs e);
//声明一个事件
public event ProcessTranEventHandler ProcessTran;
protected virtual void OnProcessTran(UserEventArgs e)
{
if (ProcessTran != null)
{
ProcessTran(this, e);
}
}
public void Prcess(UserEventArgs e)
{
OnProcessTran(e);
}
}
//观察者Email
class Email
{
public static void SendEmail(object sender, UserEventArgs e)
{
Console.WriteLine("向用户邮箱" + e.emailAddress + "发送邮件:您在"+System.DateTime.Now.ToString()+"取款金额为"+e.amount);
}
}
//观察者手机
class Mobile
{
public static void SendNotification(object sender, UserEventArgs e)
{
Console.WriteLine("向用户手机" + e.mobilePhone + "发送短信:您在" + System.DateTime.Now.ToString() + "取款金额为" + e.amount);
}
}
//订阅系统,实现银行系统订阅几个Observer,实现与客户端的松耦合
***************************************************************************************
class SubscribSystem
{
public SubscribSystem(BankAccount bankAccount, UserEventArgs e)
{
*********************************************************************************************************
bankAccount.ProcessTran += new BankAccount.ProcessTranEventHandler(Email.SendEmail);
bankAccount.ProcessTran += new BankAccount.ProcessTranEventHandler(Mobile.SendNotification);
bankAccount.Prcess(e);
}
}
class Client
{
public static void Main(string[] args)
{
Console.Write("请输入您要取款的金额:");
string amount = Console.ReadLine();
Console.WriteLine("交易成功,请取磁卡。");
//初始化e
UserEventArgs user = new UserEventArgs("jinjiangbo2008@163.com", "18868789776",amount);
//初始化订阅系统
SubscribSystem subject = new SubscribSystem(new BankAccount(), user);
Console.ReadKey();
}
}
我的问题是:划分隔线部分的代码,class SubscribSystem与 public SubscribSystem(BankAccount bankAccount, UserEventArgs e)中“SubscribSystem”这个词,分别代表了类名和函数名称,但是为什么两者必须要保持一致呢(就是说函数名不能用别的名称代替!比如换成"A"程序就出错,)请问这是什么原因呢
你好,详细看了你的代码,你的问题“委托与事件程”是不相关的。
你有无注意到,这个函数并没有返回值,且与类名同名,这个是构造函数,在类的对象初始化时执行!
追问能不能再烦请问您一下,构造函数和普通函数的区别吗?还有一个问题,构造函数是一种方法吗?
追答构造函数,故名思议,就是用来构造一个对象的,我们定义的一个类型,但是光定义了类型还不够,关键是要使用类型的对象,才能发挥类型的威力,对吧?
比如我们定义了一个如下图所示的Car对象:
那么我们要使用这个对象,就是用New关键字创建,创建对象时构造函数就会被执行,且自动地执行,如下图所示。
够详细了吧?
所以说,构造函数也是方法之一,只不过它的执行有些特殊,在类被创建时自动执行!
用C#编写事件:请高手指点一二。。我是自学的。万分感谢!!!
首先A类中要定义事件:【鞭炮声】;然后A类中还要有【触发事件的方法】,所谓触发其实就是调用事件,而事件就是多重委托,调用了事件,就是依次调用了所有绑定到该事件上的委托,而这些委托包含的就是事件的处理方法。要想接到时间通知,那么就要把接收方对象的该事件的处理方法绑定到事件发送方对象的该...
...要求在控制台应用程序中实现。 C#高手请进!!
class Program { static void Main(){ Treasury treasury = new Treasury();Thief t = new Thief(treasury);SecurityMan m = new SecurityMan(treasury);\/\/开始报警 treasury.BeginAlerm();} } \/\/\/ \/\/\/ 金库 \/\/\/ class Treasury { \/\/\/ \/\/\/ 警报响 \/\/\/ public event EventHandler ...
一个小C 问题,请高手指点!
void main(){int a=9,c=8;printf("%d\\n",(--a!=c++)?--a:++c);} (--a!=c++)先执行这个.--a=8;而c++是先取c的值,然后在自加.此后c=9;由于(--a!=c++)为假,所以值为++c,它是先自加,所以c=10..
C语言编程问题,高手请进,急问!
如果是在一些开发环境中,可以将判断按键是不是为回车写在OnKeyPress事件上。下面只给出一个输出按的什么键的程序 int getkey(){ int c;c = getchar();putchar(c);return c;}
c语言问题,高手请进谢谢!!!
3、此时前面有两个i等待运行,即i+i--->这两个i些时都是3;而不是一个2,一个3;4。再一个++i 此时i加1得到i,i=3+1=4;由上面的理解知道i此时已经是4,5、由上面四步得到一个i=4,i+i+i的式子,写入数据得到12 今天上课还在纠结这个问题,一看到你的问题突然想起来了!呵呵 ...
java一个小问题,高手请进!!!
不会呀,你说的010 020 什么的是存在list中的。e.getItem是返回你选中的是列表里的第几项。Item有索引的,你存的时候是有顺序的所以都对应好了,就是说item的索引和code索引还有name索引都是对应的相同的,所以可以在name中取出城市。
六年级一道工程问题,高手请进!!
根据“在同样的时间内,乙管的进水量是甲管的1.6倍”。可以知道甲乙两管的进水量的比、工效的比都是1:1.6=5:8。再根据“甲开始由甲管灌入1\/5水池的水,然后关闭甲管,打开乙管,剩下的由乙管单独灌满,”可以知道甲乙两管的工作量的比是1\/5:(1-1\/5)=1:4。这样就算出了甲乙两管...
一个小小的英语问题,高手请进。急求正确答案。
这种词可数 不可数都要看句子的 1.在这句话中medicine应该是说药的总称,是总体上说的,所以不用分的很细.就用 medicine.2.第二句话中说的是一种药,(中药)所以要+S
关于C语言的一个问题,高手请进
解释一下,a.c文件中调用了b()函数,a.c包含了b.h头文件,所以a.c文件能正常调用b()函数,这点大家应该都没有问题,但main()中通过调用a()来间接调用b()函数需不需要b()的头文件呢,答案是不需要的,从编译过程中,我们知道,编译器把a.c、b.c和main.c分别编译成a.o、b.o和main.o的...
一个超简单的问题~~~高手请进
因为2^9=512,不够检索完1000个,那么再来一次:2^10=1024,就够检索完1000个了。二分查找次数以2为基数,2的10次方为1024,完全可以查找到,所以最多只需要10次即可。2的10次方为1024>1000 2的5次方为512<1000 你应该知道什么是2分法吧。就是折半查找。总是从他的2分之1比大小。所以……...