私はいくつかのコードを要約:C#で一般的な多型を実装する方法は?混乱を避けるために
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)
{
}
}
}
私はコードをデバッグするとき、私はMain()
でInvalidCastExceptionが得られます。
ISpecificEntity
はIIdentifier
を実装しています。 しかし、明らかにIManager<ISpecificEntity>
からIManager<IIdentifier>
への直接キャストは機能しません。
私は共分散を使って作業することはできますが、IManager<TIdentifier>
をIManager<in TIdentifier>
に変更することは役に立たないと思いました。
したがって、specificManager
をIManager<IIdentifier>
にキャストする方法はありますか?
ありがとうございました。 IManager<IIdentifier>
で
お読みください:http://stackoverflow.com/questions/245607/how-is-generic-covariance-contra-variance-implemented-in-c-sharp-4-0 –