错误:是';方法';但被用作';键入';
本文关键字:键入 错误 方法 | 更新日期: 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);
^ ^
注意小的d
和void
返回类型。使用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;