无法将基实例的对象转换为派生类型(泛型用法)

Cannot convert object of base instance to derived type (generics usage)

我有一个区间的通用版本 startend,以及一个具体的 class 使用 DateTime.

通用版本为方便起见定义了一个 Empty 值。 当我 运行 这段代码时,问题就来了。

它在 Main 方法的唯一一行中抱怨:

Unable to cast object of type 'Interval`1[System.DateTime]' to type 'DateTimeInterval'.

它抱怨一个实例无法转换为我想要的类型。为什么??我无法理解这个限制。

void Main()
{
    DateTimeInterval p = (DateTimeInterval)DateTimeInterval.Empty;
}

class Interval<T>
{
    public Interval(T start, T end)
    {       
        Start = start;
        End = end;
    }
    
    public T Start { get; set; }
    public T End { get; set; }
    
    public static Interval<T> Empty = new Interval<T>(default, default);
}

class DateTimeInterval : Interval<DateTime> 
{
    public DateTimeInterval(DateTime start, DateTime end):base(start, end)
    {       
    }   
}

此问题与变体和泛型无关。下一个代码会给你同样的错误:

class Interval1
{
    public static Interval1 Empty = new Interval1();
}

class DateTimeInterval1 : Interval1
{
}

DateTimeInterval1 p = (DateTimeInterval1)DateTimeInterval1.Empty;

原因是 EmptyInterval 而非 DateTimeInterval 的实例,因此无法转换为 DateTimeInterval