C#的委托有啥用,依赖于啥情况而存在的一个概念——也就是其存在的必要性和优越性体现在哪里

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C#的委托有啥用,依赖于啥情况而存在的一个概念——也就是其存在的必要性和优越性体现在哪里相关的知识,希望对你有一定的参考价值。

请用具体的实例演示说明一下

因为普通调用很多功能实现不了,所以出现委托

委托是C#中最为常见的内容。与类、枚举、结构、接口一样,委托也是一种类型。类是对象的抽象,而委托则可以看成是函数的抽象。一个委托代表了具有相同参数列表和返回值的所有函数。

可以实现异步线程操作UI,可以实现观察者模式等,可以将方法当作参数操作等
例如:
我们要为void Do(int a, double b) 的方法创建委托
定义委托:
delegate void DelegateHandler(int a, double b);

public class Test
public void DelegateTest(int a, double b)
Console.WriteLine("a = 0, b = 1", a, b);


有上面的方法,可以用它对委托变量赋值了。
Test t = new Test();
DelegateHandler handler = t.DelegateTest;
handler(1, 2);

比如Winform 异步线程更新UI
this.Invoke(new Action(Delegate
this.textBox1.Text = "1";

))
参考技术A 个人理解:
不用委托,如何解决重用性问题?
C#里面预置了很多方法是调用委托的,具体实现过程由其他开发者自行设计,这样也比较灵活。如果这些方法不调用委托,而是传参数的话,那微软的开发人员还不疯掉啊,无论设计多少个方法,都无法满足其他开发者的要求啊。
比如某些预置的排序、比较,就是调用委托的。

ivy xml的依赖标签中的传递字段有啥用?

【中文标题】ivy xml的依赖标签中的传递字段有啥用?【英文标题】:What is the use of transitive field in ivy xml's dependency tag?ivy xml的依赖标签中的传递字段有什么用? 【发布时间】:2017-03-26 13:12:03 【问题描述】:

我已经尝试搜索它,但我没有找到任何令人满意的答案,所以我发布了这个问题。如果您有可以详细解释这一点的文档,请告诉我。

我的 ivy xml 中有这一行:

<dependency org="org.apache.commons" name="commons-lang3" rev="3.3.2" transitive="false" />

我不明白这个传递字段有什么用。我正在处理一个已经构建的项目,我不得不添加新的 jars。所以我遵循了与它已经存在的模式相同的模式。 我尝试删除这个“传递”字段,但我的项目中没有任何改变。然后我把它改成了真的。同样,没有变化。这是干什么用的? 这是它下载所有 3 的原因吗:任何特定 jar 的源代码、javadoc 和 jar?如果删除它不影响我的项目,是否可以从我的 ivy xml 中删除它?

apache 网站说:“true to resolve dependencies transitively, false else”这并没有消除我的疑虑。

【问题讨论】:

【参考方案1】:

在干净的工作区中尝试(还没有依赖项)。 此外,commons-lang3 可能不是一个很好的例子来了解 transtive 的作用,因为它本身不依赖于任何其他库。


来自official document 的Example 部分(突出显示我的):

<dependency org="foo" name="bar" revision="3.0" transitive="false" conf="default->@;runtime,test->runtime"/> 

在修订版 3.0 中声明对来自 foo 的模块 bar 的依赖。

由于transitive的设置,bar的依赖本身不会被包含

【讨论】:

【参考方案2】:

set transitive="true" 以传递方式解决此依赖关系,否则为 false。 默认值为真。 <dependency org="org.hibernate" name="hibernate-core" rev="3.3.1.GA" transitive="true" /> 对于上述依赖,常春藤下载所有依赖 jar 的“hibernate-core”,因为传递设置为“true”。如果为 false,ivy 不会下载这些依赖项。

【讨论】:

只有当你构建的配置没有设置全局传递值本身时,这才是正确的(参见传递ant.apache.org/ivy/history/2.5.0/ivyfile/conf.html)。如果是,则该值优先于依赖项的传递值。

以上是关于C#的委托有啥用,依赖于啥情况而存在的一个概念——也就是其存在的必要性和优越性体现在哪里的主要内容,如果未能解决你的问题,请参考以下文章

C#多播委托和事件有啥区别

visualstudio的unity组件有啥用

udevadm 解决有啥用? [关闭]

java中重载有啥用

LockSupport 线程工具类有啥用?

spring框架的核心概念:IoC和AOP到底有啥用?