public interface ILog
{
void AddLog();
event EventHandler<Exception> Error;
}
public class Logger : ILog
{
public bool LastEvent { get; set; }
EventHandler<Exception> _error;
public event EventHandler<Exception> Error
{
add
{
if (LastEvent)
{
if (_error != null)
{
_error = null;
}
_error += value;
}
else
{
if (_error == null)
{
_error += value;
}
}
}
remove
{
_error -= value;
}
}
public void AddLog()
{
try
{
throw new NotImplementedException();
}
catch (Exception ex)
{
_error?.Invoke(this, ex);
}
}
}
public class Test
{
public void Log()
{
Logger logger = new Logger();
logger.Error += Logger_Error;
logger.Error += Logger_Error2;
logger.AddLog();
}
private void Logger_Error(object sender, Exception e)
{
Console.WriteLine($"1--{e.Message}");
}
private void Logger_Error2(object sender, Exception e)
{
Console.WriteLine($"2--{e.Message}");
}
}
C# 防止委托事件多次注册
最新推荐文章于 2023-08-16 13:52:26 发布