using System;
using System.IO;
namespace BoilerEventApp1
{
//boiler类
class Boiler
{
private int temp;
private int pressure;
public Boiler(int t,int p)
{
temp = t;
pressure = p;
}
public int getTemp()
{
return temp;
}
public int getPressure()
{
return pressure;
}
}
//事件发布器
class DelegateBoilerEvent
{
public delegate void BoilerLogHandler(string status);
//基于上面的委托定义事件
public event BoilerLogHandler BoilerEventLog;
public void LogProcess()
{
string remarks = "O. K";
Boiler b = new Boiler(100, 120);
int t = b.getTemp();
int p = b.getPressure();
if(t>150||t<80||p<12||p>15)
{
remarks = "Need Maintenance";
}
OnBoilerEventLog("Logging Info : \n");
OnBoilerEventLog("Temparature " + t + "\nPressure: " + p);
OnBoilerEventLog("\nMessage: " + remarks);
}
protected void OnBoilerEventLog(string message)
{
if(BoilerEventLog != null)
{
BoilerEventLog(message);
}
}
}
//该类保留写入日志文件的条款
class BoilerInfoLogger
{
FileStream fs;
StreamWriter sw;
public BoilerInfoLogger(string filename)
{
fs = new FileStream(filename, FileMode.Append, FileAccess.Write);
sw = new StreamWriter(fs);
}
public void Logger(string info)
{
sw.WriteLine(info);
}
public void Close()
{
sw.Close();
fs.Close();
}
}
//事件订阅器
public class RecordBoilerInfo
{
static void Logger(string info)
{
Console.WriteLine(info);
}
static void Main(string[] args)
{
BoilerInfoLogger filelog = new BoilerInfoLogger(
"C:\\Users\\Rooobins\\Desktop\\boiler.txt"); //创建写入日志的文件
DelegateBoilerEvent boilerEvent = new DelegateBoilerEvent(); //实例化事件发生器
boilerEvent.BoilerEventLog += new /*基于委托定义的事件*/
DelegateBoilerEvent.BoilerLogHandler(Logger); //事件发生器之委托
boilerEvent.BoilerEventLog += new
DelegateBoilerEvent.BoilerLogHandler(filelog.Logger);
boilerEvent.LogProcess(); //事件发生器,反应写入过程
Console.ReadLine();
filelog.Close();
}
}
}