如何在 C# 中从封闭构造的 class 获取基础 class 对象
How to get base class object from closed constructed class in C#
只是另一个小的 C# 培训应用程序,只是另一个编译错误,但它不能就此消失......我只是想知道,我在这里做错了什么:
public abstract class Material
{
}
public abstract class Cloth<T> where T:Material
{
public T Prop { get; set; }
}
public class Cotton : Material
{
}
public class Dress<T> : Cloth<T> where T : Material
{
}
public class Test
{
private Cloth<Material> cloth;
public Test()
{
/* below won't compile */
cloth = new Dress<Cotton>();
}
}
我想从封闭构造的 class 中获取基础 class 对象。有人吗?
尝试编译时出现错误:
Cannot implicitly convert type Dress<Cotton> to Cloth<Material>
你想要实现的叫做协方差 (see the following article for samples).
不幸的是,类 没有变体支持:它仅限于接口和委托。
因此,或者,您可以设计一个名为 ICloth<T>
且具有 T
协变的接口:
public interface ICloth<out T>
{
T Prop { get; set; }
}
并在任何可能的布料中实施它,包括 Cloth<T>
。
现在将 cloth
键入 ICloth<T>
并且您的作业应该有效(即 cloth = new Dress<Cotton>();
),因为 Dress<Cotton>
是 ICloth<out T>
,这是一个接口T
协变泛型参数。
详细了解具有变体的通用接口 in the following article on MSDN。
只是另一个小的 C# 培训应用程序,只是另一个编译错误,但它不能就此消失......我只是想知道,我在这里做错了什么:
public abstract class Material
{
}
public abstract class Cloth<T> where T:Material
{
public T Prop { get; set; }
}
public class Cotton : Material
{
}
public class Dress<T> : Cloth<T> where T : Material
{
}
public class Test
{
private Cloth<Material> cloth;
public Test()
{
/* below won't compile */
cloth = new Dress<Cotton>();
}
}
我想从封闭构造的 class 中获取基础 class 对象。有人吗?
尝试编译时出现错误:
Cannot implicitly convert type Dress<Cotton> to Cloth<Material>
你想要实现的叫做协方差 (see the following article for samples).
不幸的是,类 没有变体支持:它仅限于接口和委托。
因此,或者,您可以设计一个名为 ICloth<T>
且具有 T
协变的接口:
public interface ICloth<out T>
{
T Prop { get; set; }
}
并在任何可能的布料中实施它,包括 Cloth<T>
。
现在将 cloth
键入 ICloth<T>
并且您的作业应该有效(即 cloth = new Dress<Cotton>();
),因为 Dress<Cotton>
是 ICloth<out T>
,这是一个接口T
协变泛型参数。
详细了解具有变体的通用接口 in the following article on MSDN。