Почему ограничение общего типа приводит к неявной ошибке преобразования ссылок?
Я создал несколько интерфейсов и общих классов для работы с назначениями в повестке дня:
interface IAppointment where T : IAppointmentProperties
{
T Properties { get; set; }
}
interface IAppointmentEntry where T : IAppointment
{
DateTime Date { get; set; }
T Appointment { get; set; }
}
interface IAppointmentProperties
{
string Description { get; set; }
}
class Appointment : IAppointment where T : IAppointmentProperties
{
public T Properties { get; set; }
}
class AppointmentEntry : IAppointmentEntry where T : IAppointment
{
public DateTime Date { get; set; }
public T Appointment { get; set; }
}
class AppointmentProperties : IAppointmentProperties
{
public string Description { get; set; }
}
Я пытаюсь использовать некоторые ограничения на параметры типа, чтобы гарантировать, что могут быть указаны только допустимые типы. Однако при указании ограничения, определяющего, чтоT
должен реализоватьIAppointment
компилятор выдает ошибку при использовании класса, который:Appointment
class MyAppointment : Appointment
{
}
// This goes wrong:
class MyAppointmentEntry : AppointmentEntry
{
}
class MyAppointmentProperties : AppointmentProperties
{
public string ExtraInformation { get; set; }
}
Ошибка:
The type 'Example.MyAppointment' cannot be used as type parameter 'T' in the generic type or method 'Example.AppointmentEntry'. There is no implicit reference conversion from 'Example.MyAppointment' to 'Example.IAppointment'.
Кто-нибудь может объяснить, почему это не работает?