gpt4 book ai didi

c# - 委托(delegate)与事件

转载 作者:太空狗 更新时间:2023-10-29 18:20:54 24 4
gpt4 key购买 nike

当一个类不能(或不应该)做某事时,事件或委托(delegate)可能是一种解决方案。

class President
Event AskedQuestion(QuestionEventArgs)
Delegate GetAnswerToQuestion

class Scientist
AnswerToQuestion()

// delegate approach
myPresident.GetAnswerToQuestion = AddressOf myScientist.AnswerToQuestion
// called once myPresident need it

// event approach
myScientist.AnswerToQuestion(questionEventArgs) Handles President.AskedQuestion
{
// executed once president asked a question
}

在委托(delegate)方法中,Scientist 方法直接由总统类使用,如果一位总统提出问题,Scientist 会给出答案。

在 .NET Framework 代码中我没有观察到委托(delegate)的直接使用。直接使用它是否错误,如果错误,为什么?

最佳答案

Is it wrong to use it directly, and if, why?

不,这没有错。

这是我的看法。委托(delegate)字段之于事件就像字符串字段之于属性。也就是说,您可能有:

class Car
{
private string modelName;
public string ModelName { get { return this.modelName; } }
...

模型名称​​逻辑上是汽车的属性。当有人问你开的是什么车,你说“福特福克斯”时,你是在描述这辆车的属性。你不会把“福特福克斯”当成一个“田”或“弦”,你会把它当成一种汽车的名字。在计算机程序中,字符串字段只是名称存储方式的实现细节。该属性可以是一个字符串,也可以是一个枚举,或者其他任何东西;关键是,从逻辑上讲,汽车有型号名称,而不是字符串字段。

事件和委托(delegate)是一样的。汽车可以有一个“爆炸”事件(也许你正在编写一个视频游戏!)并且爆炸事件由委托(delegate)类型的字段实现。爆炸是汽车合乎逻辑的事情;委托(delegate)字段是实现事件的机制。

那么直接使用委托(delegate)是“错误”的吗?不,当然不是。无非直接使用字符串是“错误”的。有时您需要操作不是属性的字符串,有时您需要操作不是事件的委托(delegate)。

诀窍是编写清楚地将机械 流程与业务 流程分开的代码。如果您发现您将大量字符串逻辑与您的属性逻辑混合在一起,或者将大量委托(delegate)操作与您的事件混合在一起,那么您可能会考虑尝试将机制代码与业务代码分开一点,以便它更容易看出哪个是哪个。

关于c# - 委托(delegate)与事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6107757/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com