错误:是'方法',但用作'类型'

时间:2014-04-25 11:33:58

标签: c#

我正在使用代表和活动运行时间和考勤日志程序。

我在课程部分编写了这段代码:

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'

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

2 个答案:

答案 0 :(得分:3)

更改此

public Delegate AttendanceLogHandler(string Message);

public delegate void AttendanceLogHandler(string Message);
       ^        ^

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

答案 1 :(得分:1)

应使用小写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;
}

附注,你不应该把"新的DelegateEvent.Attendance ......"你可以通过" logger.LogMessage"如:

dEvent.EventLog += logger.LogMessage;