私は議題の予定を操作するためのインタフェースおよび一般的なクラスのカップルを作成している:私は唯一の有効なタイプを指定することができることを確実にするために型パラメータにいくつかの制約を使用しようとしているはなぜジェネリック型の制約はありません暗黙の基準変換エラーが発生していますか?
interface IAppointment<T> where T : IAppointmentProperties
{
T Properties { get; set; }
}
interface IAppointmentEntry<T> where T : IAppointment<IAppointmentProperties>
{
DateTime Date { get; set; }
T Appointment { get; set; }
}
interface IAppointmentProperties
{
string Description { get; set; }
}
class Appointment<T> : IAppointment<T> where T : IAppointmentProperties
{
public T Properties { get; set; }
}
class AppointmentEntry<T> : IAppointmentEntry<T> where T : IAppointment<IAppointmentProperties>
{
public DateTime Date { get; set; }
public T Appointment { get; set; }
}
class AppointmentProperties : IAppointmentProperties
{
public string Description { get; set; }
}
。 T
はIAppointment<IAppointmentProperties>
を実装する必要があることを定義する制約を指定する際にAppointment<AppointmentProperties>
あるクラスを使用した場合しかし、コンパイラはエラーを与える:
class MyAppointment : Appointment<MyAppointmentProperties>
{
}
// This goes wrong:
class MyAppointmentEntry : AppointmentEntry<MyAppointment>
{
}
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<T>'. There is no implicit reference conversion from 'Example.MyAppointment' to 'Example.IAppointment<Example.IAppointmentProperties>'.
誰もが理由を説明でしたこれは動作しません?
これは奇妙です。 **しかし**:これはジェネリック医薬品の大量の過度使用です。非常に単純化されたコード(私はそうであると思われる)をほとんど読めません。 –