错误:是';方法';但被用作';键入';

本文关键字:键入 错误 方法 | 更新日期: 2023-09-27 18:00:00

我正在使用委托和事件运行一个时间和出勤日志程序。

我在课堂上有一段代码:

class DelegateEvent
{
    public Delegate AttendanceLogHandler(string Message);
    public event AttendanceLogHandler EventLog;
    public void LogProcess()
    {
      // Executable statements.
    }

在主流中,我有以下代码:

    static void Main(string[] args)
    {
        AttendanceLogger FileLog = new AttendanceLogger("C:''process.log");
        DelegateEvent DEvent = new DelegateEvent();
        DEvent.EventLog += new DelegateEvent.AttendanceLogHandler(Logger);
        DEvent.EventLog += new DelegateEvent.AttendanceLogHandler(FileLog.Logger);
        DEvent.LogProcess();
        Console.ReadLine();
        FileLog.Close();
    }

我在主流中使用的AttendanceLogHandler抛出了一个错误,声明:

' timenattndncelog.DelegateEvent.AttendanceLogHandler (string)' is 'method' but is used as a 'type'

你能帮我消除这个错误吗?

错误:是';方法';但被用作';键入';

更改此

public Delegate AttendanceLogHandler(string Message);

public delegate void AttendanceLogHandler(string Message);
       ^        ^

注意小的dvoid返回类型。使用Delegate会使编译器认为您实际上正在创建一个返回类型为Delegate的方法。要创建委托类型,应使用delegate关键字,而不是Delegate类型。

委托应该用小写d和返回类型定义。以下是一些应该有所帮助的示例代码:

class Program
{
    static void Main(string[] args)
    {
        AttendanceLogger logger = new AttendanceLogger();
        DelegateEvent dEvent = new DelegateEvent();
        dEvent.EventLog += new DelegateEvent.AttendanceLogHandler(logger.LogMessage);
        dEvent.LogProcess();
    }
}
class DelegateEvent
{
    public delegate void AttendanceLogHandler(string message);
    public event AttendanceLogHandler EventLog;
    public void LogProcess()
    {
        EventLog("Delegate Event Called");
    }
}
class AttendanceLogger
{
    public AttendanceLogger() { }
    public void LogMessage(string message)
    {
        Console.WriteLine("AttendanceLogger: " + message);
    }
    private string m_logFile;
}

顺便说一句,你不应该把"new DelegateEvent.Assistance…"部分放进去。你可以通过"logger.LogMessage",如:

dEvent.EventLog += logger.LogMessage;
相关文章: