C# 转换 Action 泛型

问题描述 投票:0回答:1

我的第一堂课就像

public abstract class A
{
    protected event Action<A> onCompleted;

    public void CompleteExecution()
    {
        // doing something...
        onCompleted?.Invoke(this);
    }
}

还有另一个类

public class B : A
{
    private Action<B> _callback;

    public void Initialize(Action<B> callback)
    {
        _callback = callback;
    }

    public void Execute()
    {
        onCompleted += (Action<A>)callback;
        // doing something specific.
    }
}

然后我将 B 与类似的东西一起使用:

public class Executor
{
    private B _inst;

    public Executor
    {
        _inst = new B();
        _inst.Initialize(Callback);
    }

    public void Execute()
    {
        _inst.Execute();
    }

    public void Finalize()
    {
        _inst.CompleteExecution();
    }

    private void Callback(B inst)
    {
        // completed !!!
    }
}

我认为如果参数相关,我可以强制转换 Action,但我在

处收到无效的强制转换异常
onCompleted += (Action<A>)callback;

在B类的Execute方法中。

我通过将行替换为

解决了这个问题
onCompleted += _ => callback?.Invoke(this);

但是我觉得很丑。

有没有更好的方法来实现演员阵容?

c# generics casting action
1个回答
0
投票

有没有更好的方法来实现演员阵容?

不。

Action<T>
© www.soinside.com 2019 - 2024. All rights reserved.