我想知道代表们的目的是什么.我没有那么多地使用它们,也不能真正想到什么.
在我的课程中,有人写道,代表是符合其签名的所有方法的蓝图.
此外,您可以向一个委托添加多个方法,然后按照添加顺序在彼此之后执行它们.这可能仅对影响局部变量的方法或不返回任何值的方法有用.
我已经读过C#将Events实现为委托,记录为:
//Summary: Represents the method that
will handle an event that has no event
data.
//Parameters:
//sender: The source of the event.
//e: An System.EventArgs that contains no event data.
[Serializable]
[ComVisible(true)]
public delegate void EventHandler(object sender, EventArgs e);
Run Code Online (Sandbox Code Playgroud)
不过,这有点令人困惑.有人可以给出这个概念的一个好的,有用的例子吗?
假设我们有:
interface Foo
{
bool Func(int x);
}
class Bar: Foo
{
bool Func(int x)
{
return (x>0);
}
}
class Baz: Foo
{
bool Func(int x)
{
return (x<0);
}
}
Run Code Online (Sandbox Code Playgroud)
现在我们可以将Bar和Baz作为Foos折腾并调用他们的Func方法.
代表们对此进行了简化:
delegate bool Foo(int x);
bool Bar(int x)
{
return (x<0);
}
bool Baz(int x)
{
return (x>0);
}
Run Code Online (Sandbox Code Playgroud)
现在我们可以作为Foo代表折腾Bar和Baz.
除了获得更短的代码之外,代表们的真正好处是什么?
我想在VB.NET或C#或其他一些.NET语言中实现Observer模式.我听说代理可以用于此,但无法弄清楚为什么它们比观察者实现的普通旧接口更受欢迎.所以,
我希望这个问题不与其他问题密切相关,但其他问题似乎并没有填补知识空白.
这似乎是尝试和理解事件和代表的热门话题,在阅读了许多SO问题和MSDN文章后,我不敢说我仍然不明白.经过几年创建出色的Web应用程序,我发现自己因不理解它们而感到非常沮丧.请允许任何人在通用代码中澄清这一点.所以问题是,为什么你会使用事件和委托来调用方法?
下面是我在工作中编写的一些基本代码.我可以利用活动和代表吗?
Public Class Email
{
public string To {get;set;}
//Omitted code
public void Send()
{
//Omitted code that sends.
}
}
Public Class SomeClass
{
//Some props
Public void DoWork()
{
//Code that does some magic
//Now Send Email
Email newEmail = new Email();
newEmail.To = "me@me.com";
newEmail.Send();
}
}
Run Code Online (Sandbox Code Playgroud)
这可能不是最好的例子,但无论如何DoWork()方法可以订阅电子邮件吗?这会有用吗?任何有助于我真正理解事件和代表的帮助将不胜感激.
问候,