Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为什么可以';如果我在C中重载了add和remove,我将引发或调用事件#_C#_.net_Event Handling - Fatal编程技术网

C# 为什么可以';如果我在C中重载了add和remove,我将引发或调用事件#

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

在复制Josh Smith文章中的代码时,我复制了以下代码

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条命令,这将重新评估所有不好的命令。我只想为调用此方法的一条命令执行此操作