这里我得到一个小例子,它会导致编译器传递类型错误:
“无法将类型'ProvideValueOne'隐式转换为'ValueProviderType'”。
在我看来,不可能以任何方式违反这些类型,为什么不接受此代码呢?
启示赞赏。
public interface IProvideValue
{
int Value { get; }
}
public class ProvideValueOne : IProvideValue
{
public int Value
{
get { return 1; }
}
}
public class ProvideValueTwo : IProvideValue
{
public int Value
{
get { return 2; }
}
}
public class BaseEntity<ValueProviderType> where ValueProviderType : IProvideValue
{
public ValueProviderType Provider
{
get{
return new ProvideValueOne(); // doesnt´t compile
}
}
}
答案 0 :(得分:1)
在我看来,不可能以任何方式违反类型
哦,但它是:
var x = new BaseEntity<ProviderValueTwo>();
ProviderValueTwo y = x.Provider;
所以C#标记为正确。你是否意味着以下内容?
public class BaseEntity<ValueProviderType>
where ValueProviderType : IProvideValue, new()
{
public ValueProviderType Provider
{
get{
return new ValueProviderType();
}
}
}
注意添加的new
约束。
答案 1 :(得分:0)
BaseEntity类只期望ValueProviderType实现IProvideValue。它不知道它是什么类...如果它甚至是一个类(也许它是一个结构??)。
如果添加'new()'约束并实例化'ValueProviderType'实例怎么办?
public class BaseEntity<ValueProviderType> where ValueProviderType : IProvideValue,new()
{
public ValueProviderType Provider
{
get{
return new ValueProviderType(); // doesnt´t compile
}
}
}