我最近开始深入研究C#,但我不能通过我的生活弄清楚委托在语言中实现观察者/可观察模式时的工作方式.
有人能给我一个超级简单的例子说明它是如何完成的吗?我用谷歌搜索了这个,但我发现的所有例子都是特定于问题或过于"臃肿".
有人能为这三位最重要的代表提供一个很好的解释(希望有例子):
C#开发人员应该注意哪些其他代表?
您多久在生产代码中使用它们?
几个Linq.Enumerable函数需要一个IEqualityComparer<T>.是否有一个方便的包装类适应delegate(T,T)=>bool实现IEqualityComparer<T>?编写一个很容易(如果你忽略了定义正确的哈希码的问题),但我想知道是否有开箱即用的解决方案.
具体来说,我想对Dictionarys 进行集合操作,仅使用Keys来定义成员资格(同时根据不同的规则保留值).
委托中的Invoke和DynamicInvoke有什么区别?请给我一些代码示例来解释这两种方法之间的区别.
采取方法System.Windows.Forms.Control.Invoke(Delegate方法)
为什么会出现编译时错误:
string str = "woop";
Invoke(() => this.Text = str);
// Error: Cannot convert lambda expression to type 'System.Delegate'
// because it is not a delegate type
Run Code Online (Sandbox Code Playgroud)
但这很好用:
string str = "woop";
Invoke((Action)(() => this.Text = str));
Run Code Online (Sandbox Code Playgroud)
当方法需要普通代表时?
使用myDelegate -= eventHandlerReSharper(版本6)时出现问题:
委托减法具有不可预测的结果
JetBrains在这里解释了这背后的理性.这个解释很有意义,在阅读之后,我怀疑我-对代表的所有用处.
那么如何,
这是简化的代码:
public delegate void MyHandler (object sender);
MyHandler _myEvent;
public event MyHandler MyEvent
{
add
{
_myEvent += value;
DoSomethingElse();
}
remove
{
_myEvent -= value; // <-- ReSharper warning here
}
}
Run Code Online (Sandbox Code Playgroud) 什么是现实世界的地方呼吁代表?我很好奇这种方法是最佳解决方案的情况或模式.无需代码.
除了语法糖之外,我没有看到使用事件而不是代理的优点.也许我是误会,但似乎事件只是代表的占位符.
你能告诉我差异以及何时使用哪个?有哪些优点和缺点?我们的代码严重依赖于事件,我想深入了解它.
你何时会在事件中使用代表,反之亦然?请在生产代码中说明您对这两者的真实体验.