qq_32016801 2016-12-06 06:56 采纳率: 0%
浏览 978

关于C#委托,事件,请问C#高手,我这段代码为什么会在控制台输出?而文件中为空?

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace BoilerEventAppl
{
// 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, 12);
        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);
        sw = File.CreateText(filename);
    }
    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);
    }//end of Logger

    static void Main(string[] args)
    {
        BoilerInfoLogger filelog = new BoilerInfoLogger("e:\\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();
    }//end of main

}//end of RecordBoilerInfo

}

  • 写回答

1条回答 默认 最新

  • threenewbee 2016-12-06 16:10
    关注
     //boilerEvent.BoilerEventLog += new 
    //DelegateBoilerEvent.BoilerLogHandler(filelog.Logger);
    ->
    boilerEvent.BoilerEventLog += new DelegateBoilerEvent.BoilerLogHandler(filelog.Logger);
    
    评论

报告相同问题?

悬赏问题

  • ¥15 DIFY API Endpoint 问题。
  • ¥20 sub地址DHCP问题
  • ¥15 delta降尺度计算的一些细节,有偿
  • ¥15 Arduino红外遥控代码有问题
  • ¥15 数值计算离散正交多项式
  • ¥30 数值计算均差系数编程
  • ¥15 redis-full-check比较 两个集群的数据出错
  • ¥15 Matlab编程问题
  • ¥15 训练的多模态特征融合模型准确度很低怎么办
  • ¥15 kylin启动报错log4j类冲突