C# 为什么可以';如果我在C中重载了add和remove,我将引发或调用事件#
在复制Josh Smith文章中的代码时,我复制了以下代码C# 为什么可以';如果我在C中重载了add和remove,我将引发或调用事件#,c#,.net,event-handling,C#,.net,Event Handling,在复制Josh Smith文章中的代码时,我复制了以下代码 public event EventHandler CanExecuteChanged { add { CommandManager.RequerySuggested += value; } remove { CommandManager.RequerySuggested -= value; } } 然后在阅读之后,我还在我的类中复制了Prism的DelegateCommand类中的以下代码 protected voi
public event EventHandler CanExecuteChanged
{
add { CommandManager.RequerySuggested += value; }
remove { CommandManager.RequerySuggested -= value; }
}
然后在阅读之后,我还在我的类中复制了Prism的DelegateCommand类中的以下代码
protected void NotifyCanExecuteChanged()
{
if (CanExecuteChanged != null)
{
CanExecuteChanged(this, EventArgs.Empty);
}
}
但是他的NOTIFYCANEXECUTECHANGE方法给了我一个错误
事件“CanExecuteChanged”只能出现在+=或的左侧-=
如果从事件中删除添加和删除重载,则不会出现此错误。有人能帮我理解这背后的原因吗?我想你是想要的。它强制引发
RequerySuggested
事件。您的类似乎继承了声明事件的类。事件只能在基类中直接引发,而不能在继承的类中直接引发
如果要在继承的类中提升它,请在基类中编写以下方法,并从继承的类中调用它:
protected void RaiseMyEvent()
{
if (MyEvent != null)
{
MuEvent(this, args)
}
}
使用类似字段的事件(不带add
/remove
的简单表单的名称),然后在执行操作时,如果(CanExecuteChanged!=null)
或CanExecuteChanged(此,…)
,CanExecuteChanged指的是支持字段,这是一个类型为EventHandler
的委托字段。您可以调用委托字段。但是,在您的示例中并非如此,因为没有明显的东西可调用。当然没有本地字段,也没有转发的事件(CommandManaged.RequerySuggested
)本质上不公开任何“调用”功能
基本上,要实现这一点,您需要访问调用机制。最常见的情况是,我希望采用以下形式:
CommandManager.OnRequerySuggested();
但是如果有一个方法调用这个事件(不需要),它可以被调用任何东西
(在*上的
是“引发此事件”API的常见模式,如果它是多态的,则会加倍)因为CanExecuteChanged
不是delegate
字段。如果我的代码中有100条命令,这将重新评估所有不好的命令。我只想为调用此方法的一条命令执行此操作