Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/271.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# 试图通过使用委托实现observer时,出现错误:无法隐式转换类型';无效';我的代表所属的班级 //主题 类安全模式 { 私有bool m_enable=false; 公共布尔禁用() { 返回m_enable; } 公共委托无效NotifyObserversHandler(bool_状态); 公共事件通知者Shandler DiableCommands; 公告 { DiableCommands(m_启用); } } 公共接口ICommand { 无效执行(用户i_用户、字符串i_按钮文本、列表o_照片); 空穴双功能(); } //我唯一的观察者 公共类最流行:ICommand { 公共无效禁用功能() { m_enable=false; } } //在另一个form类中,我将我的观察者附加到委托上,错误就发生了。 foreach(tmp中的KeyValuePair runner) { ICommand curr=runner.Value; m_.dableCommands+=当前暗黑功能(); //无法将“void”转换为“SafeMode.NotifyObserversHandler” }_C#_Delegates - Fatal编程技术网

C# 试图通过使用委托实现observer时,出现错误:无法隐式转换类型';无效';我的代表所属的班级 //主题 类安全模式 { 私有bool m_enable=false; 公共布尔禁用() { 返回m_enable; } 公共委托无效NotifyObserversHandler(bool_状态); 公共事件通知者Shandler DiableCommands; 公告 { DiableCommands(m_启用); } } 公共接口ICommand { 无效执行(用户i_用户、字符串i_按钮文本、列表o_照片); 空穴双功能(); } //我唯一的观察者 公共类最流行:ICommand { 公共无效禁用功能() { m_enable=false; } } //在另一个form类中,我将我的观察者附加到委托上,错误就发生了。 foreach(tmp中的KeyValuePair runner) { ICommand curr=runner.Value; m_.dableCommands+=当前暗黑功能(); //无法将“void”转换为“SafeMode.NotifyObserversHandler” }

C# 试图通过使用委托实现observer时,出现错误:无法隐式转换类型';无效';我的代表所属的班级 //主题 类安全模式 { 私有bool m_enable=false; 公共布尔禁用() { 返回m_enable; } 公共委托无效NotifyObserversHandler(bool_状态); 公共事件通知者Shandler DiableCommands; 公告 { DiableCommands(m_启用); } } 公共接口ICommand { 无效执行(用户i_用户、字符串i_按钮文本、列表o_照片); 空穴双功能(); } //我唯一的观察者 公共类最流行:ICommand { 公共无效禁用功能() { m_enable=false; } } //在另一个form类中,我将我的观察者附加到委托上,错误就发生了。 foreach(tmp中的KeyValuePair runner) { ICommand curr=runner.Value; m_.dableCommands+=当前暗黑功能(); //无法将“void”转换为“SafeMode.NotifyObserversHandler” },c#,delegates,C#,Delegates,看看这句话: // subject class SafeMode { private bool m_enable = false; public bool Disable() { return m_enable; } public delegate void NotifyObserversHandler(bool _status); public event NotifyObserversHandler DiableComma

看看这句话:

// subject 
class SafeMode
{
    private bool m_enable = false;
    public bool Disable()
    {
        return m_enable;
    }

    public delegate void NotifyObserversHandler(bool _status);

    public event NotifyObserversHandler DiableCommands;

    public void Notify()
    {
        DiableCommands(m_enable);
    }
}


public interface ICommand
{
    void Execute(User i_User, string i_ButtonText, List<Photo> o_Photos);
    void DiableFunctionality();
}

// my only observer
public class MostPopularPic : ICommand
{
    public void DisableFunctionality()
    {
        m_enable = false;
    }
}


// at other form class that's where i  attach my observer to the delegate and the error occurs. 
foreach( KeyValuePair<string,ICommand> runner in tmp)
{
    ICommand curr = runner.Value;
    m_safer.DiableCommands += curr.DiableFunctionality();
    // faild to convert 'void' to  'SafeMode.NotifyObserversHandler' 
}
这是试图调用
curr.DiableFunctionality
,然后将方法调用的结果订阅到
m_safe.DiableCommands
事件

您现在不想调用该方法-您只想将该方法组转换为一个委托,并订阅该委托。所以你想要:

m_safer.DiableCommands += curr.DiableFunctionality();
不过,这仍然会有一个问题-您的
DiableFunctionality
方法是无参数的,而您的
NotifyObserversHandler
委托有一个
bool
参数。如果要忽略该参数,可以使用:

m_safer.DiableCommands += curr.DiableFunctionality;

现在,它使用一个lambda表达式,它接受一个参数(
忽略
)并忽略它,只需调用
curr.DiableFunctionality()

请更容易地格式化代码-缩进现在到处都是。您应该能够让VisualStudio(或您正在使用的任何IDE)对其进行格式化,然后可以将其复制/粘贴到堆栈溢出中,并使用Ctrl+K适当地调整缩进。使用预览确保发布的问题可读。
m_safer.DiableCommands += ignored => curr.DiableFunctionality();