C#将通用子类型转换为父类

假设我们有以下类型:

class A {} class B : A {} class X {} 

为什么我们不能这样做?

 X var = new X(); 

有没有可用的解决方法?

[编辑]我试图使用协方差,但它失败了,因为我想访问X中类型为T的属性,C#不允许在接口中使用类型T:

 interface IX { T sth {set; get;} } class X: IX { T sth { set; get; } } 

[编辑2]我也尝试了这个但它失败了:

 class X where T : A { public T sth { set; get; } public static implicit operator X(X v) { return new X { sth = v.sth, }; } } 

奇怪的是,C#不允许使用’sth’进行转换。