во избежание путаницы я обобщил некоторый код:
namespace ConsoleApplication1
{
class Program
{
static void Main()
{
IManager<ISpecificEntity> specificManager = new SpecificEntityManager();
IManager<IIdentifier> manager = (IManager<IIdentifier>) specificManager;
manager.DoStuffWith(new SpecificEntity());
}
}
internal interface IIdentifier
{
}
internal interface ISpecificEntity : IIdentifier
{
}
internal class SpecificEntity : ISpecificEntity
{
}
internal interface IManager<TIdentifier> where TIdentifier : IIdentifier
{
void DoStuffWith(TIdentifier entity);
}
internal class SpecificEntityManager : IManager<ISpecificEntity>
{
public void DoStuffWith(ISpecificEntity specificEntity)
{
}
}
}
Когда я отлаживаю код, я получаю InvalidCastException в Main()
.
Я знаю, что ISpecificEntity
реализует IIdentifier
.
Но очевидно, что прямое приведение из IManager
в IManager
не работает.
Я думал, что работа с ковариацией поможет, но изменение IManager
на IManager
также не помогает.
Итак, есть ли способ преобразовать SpecificManager
в IManager
?
Спасибо и всего наилучшего.