我正在使用代表和活动运行时间和考勤日志程序。
我在课程部分编写了这段代码:
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'
你能否帮我消除这个错误?
答案 0 :(得分:3)
更改此
public Delegate AttendanceLogHandler(string Message);
到
public delegate void AttendanceLogHandler(string Message);
^ ^
请注意小d
和void
返回类型。使用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;