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();