【发布时间】:2025-12-18 23:40:01
【问题描述】:
我正在尝试为我的代码中需要的功能获取概念证明。在实际的应用程序中,我有一个依赖注入容器,孩子们有时需要“新建”一个对象,我需要 DI 容器来返回该对象。所以我使用了一个带有回调的事件,它可以让孩子获得那个 instatiated 对象。
问题是,我想要一个事件,但允许它返回调用者指定的任何对象。我不确定如何取回该强类型对象(不进行强制转换)。我觉得应该可以。如果这足够令人困惑,这是我的例子:
class Program
{
public static event EventHandler<MyEventArgs> MyEvent;
public static void Main()
{
MyEvent += (sender, args) =>
{
Console.WriteLine("Event Fired");
args.Callback("hello");
};
MyEvent(null, new MyEventArgs(obj => Console.WriteLine($"How do I get {obj} strongly typed")));
Console.Read();
}
}
和事件参数:
public class MyEventArgs
{
public Action<object> Callback { get; set; }
public MyEventArgs(Action<object> callback)
{
Callback = callback;
}
}
我被卡住了,因为MyEventArgs 不能接受类型参数,因为我真的希望只有一个事件来处理任何返回对象类型。是否可以通过回调获取强类型对象?
再次,我可以将Type 作为参数发送,然后进行转换,但我觉得这应该是可行的。完全有可能这也是不可能的。
感谢您的指导。
【问题讨论】:
-
这就是问题所在。您如何看待可以采用任何类型的参数同时又是强类型的函数签名?
-
@Vova 就像我说的,这完全有可能做不到。
-
据我所知,您尝试做的具体事情无法完成。但总的来说,您想要实现的目标听起来像是工厂模式:en.wikipedia.org/wiki/Factory_method_pattern
-
@Vova,我想出了一个近乎理想的解决方案
标签: c# events generics callback