我在哪里使用代表?
在现实世界中,有哪些地方需要代表?我很好奇这种方法是最佳解决方案的情况或者模式。无需代码。
解决方案
回答
将事件绑定到事件处理程序通常是我们对委托的首次介绍...我们甚至可能不知道自己正在使用它们,因为委托被包装在EventHandler类中。
回答
通过http://en.wikipedia.org/wiki/Delegation_pattern进行了快速的Google搜索。基本上,每当我们使用将其呼叫转发到另一个对象的对象时,都在进行委派。
回答
A delegate is a named type that defines a particular kind of method. Just as a class definition lays out all the members for the given kind of object it defines, the delegate lays out the method signature for the kind of method it defines.
基于此语句,委托是函数指针,它定义该函数的外观。
谓词是在现实世界中使用委托的一个很好的例子。在链接的示例中,我们会注意到Array.Find使用数组进行搜索,然后使用谓词处理要查找的内容的条件。在这种情况下,它将通过与谓词签名匹配的ProductGT10方法。
回答
如果我们想了解在实际代码中如何使用Delegate模式,请在Mac OS X上看Cocoa。Cocoa是Apple在Mac OS X上进行编程的首选UI工具包,并用Objective C进行编码。旨在使每个UI组件都可以通过委托(而不是子类化或者其他方式)进行扩展。
有关更多信息,我建议在此处查看Apple对代表的看法。
回答
泛型列表的委托的一种常见用法是通过Action委托(或者其匿名等效项)来创建一行foreach操作:
myList.Foreach( i => i.DoSomething());
我还发现谓词委托在搜索或者修剪列表中非常有用:
myList.FindAll( i => i.Name == "Bob"); myList.RemoveAll( i => i.Name == "Bob");
我知道我们说不需要代码,但是我发现通过代码表达其有用性更加容易。 :)
回答
我有一个使用win32 Python的项目。
由于各种原因,某些模块使用odbc.py访问数据库,而其他模块使用pyodbc.py。
两种模块都需要使用某个功能时,出现了一个问题。它有一个连接对象作为参数传递给它,但是随后它必须知道是使用dbi.dbiDate还是使用datetime来表示时间。
这是因为odbc.py期望作为SQL语句中的值,日期为dbi.dbiDate而pyodbc.py期望为datetime值。
进一步的麻烦是,由odbc.py和pyodbc.py创建的连接对象不允许设置其他字段。
我的解决方案是通过委托类包装odbc.odbc(...)和pyodbc.pyodbc(...)返回的连接对象,该委托类包含所需的时间表示函数作为额外字段的值,并委托对原始连接对象的所有其他字段请求。
回答
我和我们有相同的问题,请转到该网站寻求答案。
显然,即使我略过了该线程上的示例,也并没有更好地理解它。
我现在阅读以下内容,对委托人有很大的帮助:http://www.c-sharpcorner.com/UploadFile/thiagu304/passdata05172006234318PM/passdata.aspx
对于新用户而言,这似乎更为明显,因为与使用POST / GET(QueryString)的ASP.NET网站相比,传递表单值要复杂得多。
基本上,我们定义了一个以" TextBox文本"为参数的委托。
// Form1
// Class Property Definition public delegate void delPassData(TextBox text); // Click Handler private void btnSend_Click(object sender, System.EventArgs e) { Form2 frm= new Form2(); delPassData del=new delPassData(frm.funData); del(this.textBox1); frm.Show(); }
//摘要:定义委托,实例化新的Form2类,将funData()函数分配给委托,将textBox传递给委托。显示表格。
// Form2
public void passData(TextBox txtForm1) { label1.Text = txtForm1.Text; }
//摘要:只需将TextBox txtForm1作为参数(在委托中定义),然后将标签文本分配给textBox的文本。
我希望这能对代表有所启发:) ..