混乱を避けるために、私はいくつかのコードを要約しました:
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<ISpecificEntity>
しかし、明らかに、からへの直接キャストIManager<IIdentifier>
は機能しません。
共分散で作業することでうまくいくと思いましたが、に変更IManager<TIdentifier>
しIManager<in TIdentifier>
ても役に立ちません。
だから、キャストする方法はありspecificManager
ますIManager<IIdentifier>
か?
ありがとう、そしてすべての最高。