um Verwirrung zu vermeiden zusammengefasst ich einige Code:Wie generischer Polymorphismus in C# zu implementieren?
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)
{
}
}
}
Wenn ich den Code debuggen erhalte ich eine InvalidCastException in Main()
.
Ich weiß, dass ISpecificEntity
IIdentifier
implementiert. Aber offensichtlich eine direkte Besetzung von IManager<ISpecificEntity>
in eine IManager<IIdentifier>
funktioniert nicht.
Ich dachte, die Arbeit mit Kovarianz könnte den Trick tun, aber in IManager<in TIdentifier>
zu ändern hilft auch nicht.
So ist es eine Möglichkeit, specificManager
in ein IManager<IIdentifier>
wirft?
Danke und alles Gute.
lesen Sie bitte: http://stackoverflow.com/questions/245607/how-isgeneric-covariance-contra-varianz-implementiert-in-c-sharp-4-0 –