当前位置:  开发笔记 > 编程语言 > 正文

我在哪里使用代表?

如何解决《我在哪里使用代表?》经验,为你挑选了7个好方法。

什么是现实世界的地方呼吁代表?我很好奇这种方法是最佳解决方案的情况或模式.无需代码.



1> Atish Dipong..:

正如"学习C#3.0:掌握C#3.0的基础知识"中所述

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

总统事先确定将授予哪些责任(参加葬礼),将通过哪些参数(哀悼,善意的话),以及他希望得到什么价值(善意).然后,随着他的总统任期的进行,他在"运行时"将一个特定的人分配给该委派的职责.

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

例如: 按钮可能不知道需要通知哪个或哪些对象.您不必将按钮连接到特定对象,而是将按钮连接到委托,然后在程序执行时将该委托解析为特定方法.


@ Anthony + Pacerier:一个无趣的方法不是代表.匿名方法是一段代码.委托是指向该段代码的指针.如果没有委托指向它,你就不能拥有一个无趣的方法,否则永远不会被调用.lambda是一个运算符,用于构造lambda表达式.Lambda表达式主要产生一种无用的方法,这些方法将由......委托人指出.
@Pacerier这是一个迟到的回复,您可能已经发现了答案,但为了其他读者的发现:匿名函数是一种委托.

2> Dale Ragan..:

委托是一种命名类型,用于定义特定类型的方法.正如类定义列出了它定义的给定类型对象的所有成员一样,委托为它定义的方法类型布置方法签名.

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

Predicate是真实世界应用代表的一个很好的例子.在链接的示例中,您将注意到Array.Find使用数组进行搜索,然后使用谓词来处理要查找的内容的条件.在这种情况下,它传递一个与Predicate签名匹配的方法ProductGT10.



3> Jon Limjap..:

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

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

我还发现Predicate委托在搜索或修剪List时非常有用:

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

我知道你说不需要代码,但我发现通过代码表达它的用处更容易.:)



4> FlySwat..:

将事件绑定到事件处理程序通常是您对代理的第一次介绍...您可能甚至不知道您正在使用它们,因为委托包含在EventHandler类中.



5> 小智..:

如果您有兴趣了解在实际代码中如何使用Delegate模式,在Mac OS X上别无选择。Cocoa是Apple在Mac OS X上进行编程的首选UI工具包,并在Objective C中进行了编码。旨在使每个UI组件都可以通过委托而不是子类化或其他方式进行扩展。

有关更多信息,我建议在此处查看Apple对代表的评价。



6> Omer Zak..:

我有一个使用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(...)返回的连接对象,该委托类包含所需的时间表示函数作为额外字段的值,并委托对原始连接对象的所有其他字段请求。



7> dezza..:

我和您有相同的问题,请转到该网站寻求答案。

显然,即使我略过了该线程上的示例,也并没有更好地理解它。

我现在阅读以下内容,对代表有很大的帮助: http : //www.c-sharpcorner.com/UploadFile/thiagu304/passdata05172006234318PM/passdata.aspx

对于新用户而言,这似乎更为明显,因为与使用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()函数分配给委托,将textBox传递给委托。显示表格。

// Form2

public void passData(TextBox txtForm1)
{

     label1.Text = txtForm1.Text;
}

//摘要:只需将TextBox txtForm1作为参数(在委托中定义),然后将标签文本分配给textBox的文本。

我希望这能对代表有所启发:) ..

推荐阅读
周扒pi
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有