C# 使用泛型调用重载方法
我有一个类,它有许多重载方法:C# 使用泛型调用重载方法,c#,generics,dynamic,C#,Generics,Dynamic,我有一个类,它有许多重载方法: public class CustomerCommandHandlers { public void Handler(ChangeNameCommand command) { ... } public void Handler(ChangeAddressCommand command) { ... } } 我采用了以下方法: public void Handle<TCom
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);
}
这允许我从另一个注册命令和命令处理程序的类调用重载方法
但是,在创建其他CommandHandler(如ProductCommandHandlers、InventoryCommandHandlers等)时,我不希望在每个类中都包含动态方法
是否有一种方法可以为包含此方法的每个命令处理程序创建基类,然后从基类调用此方法
谢谢如果您已经在使用dynamics,那么不妨尝试将其作为基类:
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());
}
}
如果您已经在使用dynamics,那么不妨尝试将其作为基类:
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());
}
}
太棒了。正是我想要的。回退是为了什么?因为它使用的是动态的,所以您不能确定是否有参数类型的实现。如果你想传递一些你没有处理程序的命令,你会得到一个RuntimeBinderException。要么处理该问题,要么使用回退处理程序实现自己的默认处理。编辑:修改答案以更好地匹配您的示例非常感谢您的帮助。非常棒。正是我想要的。回退是为了什么?因为它使用的是动态的,所以您不能确定是否有参数类型的实现。如果你想传递一些你没有处理程序的命令,你会得到一个RuntimeBinderException。要么处理该问题,要么使用回退处理程序实现自己的默认处理。编辑:修改答案以更好地匹配您的示例非常感谢您的帮助。