【发布时间】:2015-05-18 16:34:28
【问题描述】:
有没有办法让这个类的泛型参数在保持操作符的同时保持协变?
public class ContentReference<T> where T : IReferable
{
public string Name { get; private set; }
public ContentReference(T value)
{
this.Name = value.Name;
}
public static implicit operator ContentReference<T>(T value)
{
return new ContentReference<T>(value);
}
}
这样我就可以将ContentReference<Audio> 分配给ContentReference<SoundEffect> 或ContentReference<MusicTrack>?
【问题讨论】:
-
因为只有接口(和委托)可以是协变的,所以答案是否定的。或许,如果您详细说明您想要做什么(以及为什么_可以提供替代方案。
-
关于@DStanley 写的内容,我要补充一点:只有接口可以是协变/逆变的。只有类/结构可以有运算符(因为它们是静态方法)
-
哎呀,按错了按钮。我会澄清我的确切情况。
-
@xanatos 我已经纠正了。评论已删除。
-
@AlphaMCubed 响应仍然没有 :-) 你可以创建一个基本的
ContentReference类,并有一些virtual方法
标签: c# operator-overloading covariance