để tránh nhầm lẫn tôi tóm tắt một số mã:Làm thế nào để thực hiện đa hình chung trong 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)
{
}
}
}
Khi tôi gỡ lỗi mã tôi nhận được một InvalidCastException trong Main()
.
Tôi biết rằng ISpecificEntity
thực hiện IIdentifier
. Nhưng rõ ràng là dàn diễn viên trực tiếp từ số IManager<ISpecificEntity>
vào một IManager<IIdentifier>
không hoạt động.
Tôi nghĩ rằng làm việc với hiệp phương sai có thể thực hiện thủ thuật nhưng thay đổi IManager<TIdentifier>
thành IManager<in TIdentifier>
cũng không giúp ích gì.
Vì vậy, có cách nào để truyền specificManager
vào một IManager<IIdentifier>
không?
Cảm ơn và tất cả những điều tốt đẹp nhất.
vui lòng đọc: http://stackoverflow.com/questions/245607/how-is-generic-covariance-contra-variance-implemented-in-c-sharp-4-0 –