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’进行转换。
你需要协方差(用单词out
标记类型参数T
):
interface IX {}
这仅适用于接口类型(和委托类型)。 并且类型B
必须是引用类型(类似这里的class
就可以)。
那很好:
IX ixb = ...; IX ok = new IX();
问题是类不支持协方差和反演,只有接口:
class A { } class B : A { } class X : P { } interface P { } ... P var = new X();
协方差和逆变法常见问题解答
上述就是C#学习教程:C#将通用子类型转换为父类分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/936495.html