我有一個抽象的dto類,我想寫一個批處理類來處理派生的dto:
dto:
public abstract class Command
{
private string TraceNo { get; set; }
public override string ToString()
{
return ObjectDumper.Dump(this);
}
}
匯出dto:
public class UserLoginDirectlyCommand : Command
{
public List<string>? LoginUserId { get; set; }
public int ReserveCount { get; set; }
}
界面:
public interface ICommandHandler<in T> where T : Command
{
void Handler(T command, byte[] attachment);
}
具體處理程式:
public class LoginDirectlyCommandHandler : ICommandHandler<UserLoginDirectlyCommand>
{
public void Handler(UserLoginDirectlyCommand command, byte[] attachment)
{
}
}
我想得到一個字典,鍵是命令ID,值是具體處理程式:
public static Dictionary<int, T> GetCommandHandler<T, TC>() where TC : Command where T : ICommandHandler<TC>
{
List<ICommandHandler<Command>> list;
var dic = new Dictionary<int, T>();
dic[2] = new LoginDirectlyCommandHandler();
return dic;
}
但陳述句dic[2] = new LoginDirectlyCommandHandler();無法編譯:Cannot convert source type 'LoginDirectlyCommandHandler' to target type 'T'
誰能告訴我如何通過編譯?謝謝!
uj5u.com熱心網友回復:
好的......所以現在我們有了這個方法:
public static Dictionary<int, T> GetCommandHandler<T, TC>() where TC : Command where T : ICommandHandler<TC>
{
List<ICommandHandler<Command>> list;
var dic = new Dictionary<int, T>();
dic[2] = new LoginDirectlyCommandHandler();
return dic;
}
你怎么稱呼那個方法?
像這樣?
GetCommandHandler<擴展 ICommandHandler的東西,擴展 Command >() 的東西...
所以現在當字典被實體化時,它會用那個具體的型別來實體化它。
因此,當您對 LoginDirectlyCommandHandler 進行分配時,它不能保證提供的具體型別將與發生的分配兼容。您提供的具體型別可以是任何型別(只要它們分別是 Command 和 ICommandHandler 的子類)。因此,不能保證這些型別與您分配的 LoginDirectlyCommandHandler 兼容。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/477880.html
上一篇:是否可以將泛型引數型別限制于此?
下一篇:在函式中使用非單態泛型引數
