gpt4 book ai didi

c# - 事件参数; "sender as Object"或 "sender as T"?

转载 作者:可可西里 更新时间:2023-11-01 08:05:59 41 4
gpt4 key购买 nike

当我为我的业务对象编写公共(public)事件时,除了额外的特定参数外,我已经习惯了始终将实例作为“发送者作为对象”传递。我现在只是问自己为什么我不指定类

所以对于有更多经验的你; 您是否曾经在事件中作为发件人传递不同的类别?如果是这样,您的决策标准是什么时候可以/不可以?

最佳答案

不要太极端。 EventHandler(object sender, EventArgs e) 有一个对象发送器,所以我们可以在很多情况下使用它。但这并不意味着强类型发件人是邪恶的。当此委托(delegate)不会被广泛使用(如 EventHandler)时,强类型发送器很有用,例如

public delegate void SaveHandler(Controller sender, EventArgs e);

现在其他开发人员(或使用您的库的人)可以识别出发送者必须是一个Controller,他们会很高兴不这样编码:

public void MySaveHandler(object sender, EventArgs arg)
{
var controller = sender as Controller;
if (controller != null)
{
//do something
}
else
{
//throw an exception at runtime?
//It can be avoided if sender is strongly-typed
}
}

你甚至可以让它变得通用:

public delegate void SaveHandler<T>(T sender, EventArgs args) 
where T: IController;

在 C# 中这是纯粹的合法和良好实践。你应该明确你想做什么,然后选择更好的方法。他们中的任何一个都是邪恶的/坏的。

关于c# - 事件参数; "sender as Object"或 "sender as T"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4944633/

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