Почему ограничение общего типа приводит к неявной ошибке преобразования ссылок?

Я создал несколько интерфейсов и общих классов для работы с назначениями в повестке дня:

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'.

Кто-нибудь может объяснить, почему это не работает?

Ответы на вопрос(5)

Ваш ответ на вопрос