대리자 목록 (여기에서는 "mCommandHandlers")을 유지 관리하고 싶습니다.일반 대리자 형식의 대리자 형식 및 공분산
public delegate void CommandHandler<TCommand>(TCommand command) where TCommand : ICommand;
public delegate void ICommandHandler(ICommand command);
Dictionary<Type, ICommandHandler> mCommandHandlers;
가 나는 등의 정확히 어떤 종류의 알과 같은 컴파일시 장점에 대한 첫 번째 유형을 사용한다 : 그들은 일반적인 위임있어 이후로, 나는 실제로 나는 그런 목록을 유지 관리 할 수 있도록 위임의 두 번째 유형을 정의 TCommand 나의 위임의 구현에 사용되는 :
RegisterHandler<ResourceCommand>((command) =>
{
if (command != null)
{
ResourceManager.ResourceReceived(command.ResourceName, command.ResourceHash, command.ResourceData);
}
});
내부 RegisterHandler, 이제 다음을 수행 싶습니다 :
public void RegisterHandler<TCommand>(CommandHandler<TCommand> handler) where TCommand : ICommand
{
mCommandHandlers.Add(typeof(TCommand), handler);
}
하지만 다음 전자를 얻을 수 rror 메시지 :
오류 3 인수 2 :에서
CommandHandler<TCommand>'
'ICommandHandler'
이 왜로 변환 할 수 없습니다? 컴파일러는 실제로 첫 번째 델리게이트 형식이 인수가 적어도 ICommand 유형이어야한다고 말하면서 델리게이트 인스턴스가 두 번째 델리게이트 형식의 서명을 준수하는지 확인합니다.
어떻게 공분산 아이디어가 잘못된 방식으로 바뀌 었는지 알 수 있습니다. :) 내 특정 대리인은 mCommandHandlers의 일부로 ICommand를 받아들이 기 위해 기다릴 수 없습니다. 그 점을 지적 해 주셔서 감사합니다! – user1610325