使用泛型调用重载方法

时间:2012-03-09 09:53:21

标签: c# generics dynamic

我有一个有多个重载方法的类:

public class CustomerCommandHandlers 
{

    public void Handler(ChangeNameCommand command)
    {
      ...
    }

    public void Handler(ChangeAddressCommand command)
    {
      ...
    }
}

我已经包含以下方法:

    public void Handle<TCommand>(TCommand command) where TCommand : ICommand
    {
        Handler((dynamic)command);
    }

允许我从另一个注册命令和命令处理程序的类中调用重载方法。

但是,当我创建其他commandHandlers(如ProductCommandHandlers,InventoryCommandHandlers等)时,我不想在每个类中包含动态方法。

有没有办法可以为每个包含此方法的命令处理程序创建基类,然后我可以从基类调用此方法?

由于

1 个答案:

答案 0 :(得分:4)

如果您已经在使用动力学,那么您可以尝试将其作为基类:

public class Basehandler 
{
    public void Handle<TCommand>(T command) where TCommand : ICommand {
        ((dynamic)this).Handler(command);
    }

    // As fallback if there is no implementation for the command type
    public void Handler(ICommand val) {
        // You could implement default or error handling here.
        Console.WriteLine(val == null ? "null" : val.GetType().ToString());
    }
}