[英]How to implement generic polymorphism in 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>
您可以執行以下操作:
IIdentifier entity = new NotSpecificEntity();
manager.DoStuffWith(entity);
這將在您的SpecificEntityManager
導致異常,因為它只接受ISpecificEntity
類型的參數
更新:您可以在Eric Lippert的博客中閱讀有關C#中的協方差和逆變的更多信息
為什么不:
ISpecificEntity bankAccountManager = new SpecificEntity();
IManager<IIdentifier> manager = (IManager<IIdentifier>)bankAccountManager;
manager.DoStuffWith(new SpecificEntity());
?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.