我在哪里使用代表?

什么是真正的世界地方,要求代表? 我很好奇这种方法是最好的解决scheme的情况或模式。 没有要求的代码。

委托是定义特定types的方法的命名types。 正如类定义为所定义的给定types的对象列出所有成员一样,委托人为其定义的方法列出了方法签名。

基于这个语句,一个委托是一个函数指针,它定义了这个函数的外观。

谓词的真实世界应用的一个很好的例子是谓词 。 在链接的例子中,你会注意到Array.Find需要数组来search,然后是一个谓词来处理find的标准。 在这种情况下,它传递一个匹配Predicate签名的ProductGT10方法。

正如“学习C#3.0:掌握C#3.0的基础”

一般情况:当国家元首去世时,美国总统通常没有时间亲自参加葬礼。 相反,他派出一个代表。 通常这个代表是副总统,但有时副总裁不在,总统必须派其他人,比如国务卿,甚至第一夫人。 他不想“硬连线”他的授权给一个人; 他可能会把这个责任委托给能够执行正确的国际协议的任何人。

总统事先规定了下放责任(参加葬礼),通过什么样的参数(吊,,善意的话),以及他希望得到什么样的价值(善意)。 然后,他在主席任期的过程中,在“运行时”指派一个特定的人负责这个委派的责任。

在编程scheme中:您经常遇到需要执行某个特定操作的情况,但是您事先并不知道需要调用哪个方法,甚至哪个对象来执行它。

例如:一个button可能不知道哪个或哪些对象需要通知。 将button连接到特定的对象,而不是将button连接到一个委托,然后在程序执行时将该委托parsing为特定的方法。

委托对通用列表的一种常见用法是通过Action委托(或其匿名等价物)来创build一个单行的foreach操作:

myList.Foreach( i => i.DoSomething()); 

我还发现Predicate委托在search或修剪List中非常有用:

 myList.FindAll( i => i.Name == "Bob"); myList.RemoveAll( i => i.Name == "Bob"); 

我知道你说没有要求的代码,但是我发现通过代码expression它的有用性更容易。 🙂

将事件绑定到事件处理程序通常是第一次向委托人介绍…您可能不知道您正在使用它们,因为委托包装在EventHandler类中。

如果您对在实际代码中如何使用Delegate模式感兴趣,可以看看Mac OS X上的Cocoa。Cocoa是Apple在Mac OS X中用于编程的首选UI工具包,并且在Objective C中进行了编码。旨在通过授权而不是子类或其他方式扩展每个UI组件。

欲了解更多信息,我build议查看一下苹果在这里所说的代表。

我有一个使用Win32 Python的项目。

由于各种原因,一些模块使用odbc.py来访问数据库,以及其他模块 – pyodbc.py。

当两种模块需要使用某个function时,都会出现问题。 它有一个连接对象作为parameter passing给它,但它必须知道是否使用dbi.dbiDate或datetime来表示时间。

这是因为odbc.py预期,作为SQL语句中的值,date为dbi.dbiDate,而pyodbc.py预期的date时间值。

另一个复杂的问题是由odbc.py和pyodbc.py创build的连接对象不允许设置其他字段。

我的解决scheme是通过委托类包含由odbc.odbc(…)和pyodbc.pyodbc(…)返回的连接对象,委托类包含所需的时间表示函数作为额外字段的值,以及哪个委托所有其他字段请求到原始连接对象。

我有和你一样的问题,并去了这个网站的答案。

显然,即使我通过这个线程上的例子,我也没有更好地理解它。

现在我发现代理人的用处很大: http : //www.c-sharpcorner.com/UploadFile/thiagu304/passdata05172006234318PM/passdata.aspx

这对新用户来说可能更为明显,因为Forms比使用POST / GET(QueryString)的ASP.NET网站传递值要复杂得多。

基本上你可以定义一个以“TextBox text为参数的委托。

// 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()函数进行委托,将文本框传递给委托。 显示表单。

// Form2

 public void passData(TextBox txtForm1) { label1.Text = txtForm1.Text; } 

//摘要:只需将TextBox txtForm1作为参数(如代理中定义的)并将标签文本分配给文本框的文本。

我希望这个启发一些代表使用:) ..

快速谷歌search了这个http://en.wikipedia.org/wiki/Delegation_pattern 。 基本上,任何时候你使用一个对象转发它的调用另一个对象,那么你正在委托。