Как реализовать универсальный полиморфизм в С#?

во избежание путаницы я обобщил некоторый код:

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?

Спасибо и всего наилучшего.

5
задан Palama 18 April 2012 в 14:43
поделиться