Generics 尽管约束了泛型参数,但转换失败
这里我得到了一个小示例,它导致编译器传递类型为的错误: 无法将类型“ProviderValueOne”隐式转换为“ValueProviderType” 在我看来,不可能以任何方式违反类型,那么为什么不接受此代码呢 启蒙运动受到赞赏Generics 尽管约束了泛型参数,但转换失败,generics,interface,constraints,Generics,Interface,Constraints,这里我得到了一个小示例,它导致编译器传递类型为的错误: 无法将类型“ProviderValueOne”隐式转换为“ValueProviderType” 在我看来,不可能以任何方式违反类型,那么为什么不接受此代码呢 启蒙运动受到赞赏 public interface IProvideValue { int Value { get; } } public class ProvideValueOne : IProvideValue { public int Value {
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
}
}
}
公共接口IProvideValue
{
int值{get;}
}
公共类ProvideValueOne:IProvideValue
{
公共整数值
{
获取{return 1;}
}
}
公共类providevalue二:iprovevalue
{
公共整数值
{
获取{return 2;}
}
}
其中ValueProviderType:IProviderValue的公共类BaseEntity
{
公共价值提供者类型提供者
{
得到{
返回新的ProviderValueOne();//未编译
}
}
}
在我看来,不可能以任何方式违反这些类型
哦,但它是:
var x = new BaseEntity<ProviderValueTwo>();
ProviderValueTwo y = x.Provider;
var x=new BaseEntity();
ProviderValueTwo y=x。提供程序;
所以C#标记这一点是正确的。你可能是指以下的意思吗
public class BaseEntity<ValueProviderType>
where ValueProviderType : IProvideValue, new()
{
public ValueProviderType Provider
{
get{
return new ValueProviderType();
}
}
}
公共类基本实体
其中ValueProviderType:IProvideValue,new()
{
公共价值提供者类型提供者
{
得到{
返回新的值ProviderType();
}
}
}
请注意添加的new
约束
在我看来,不可能以任何方式违反这些类型
哦,但它是:
var x = new BaseEntity<ProviderValueTwo>();
ProviderValueTwo y = x.Provider;
var x=new BaseEntity();
ProviderValueTwo y=x。提供程序;
所以C#标记这一点是正确的。你可能是指以下的意思吗
public class BaseEntity<ValueProviderType>
where ValueProviderType : IProvideValue, new()
{
public ValueProviderType Provider
{
get{
return new ValueProviderType();
}
}
}
公共类基本实体
其中ValueProviderType:IProvideValue,new()
{
公共价值提供者类型提供者
{
得到{
返回新的值ProviderType();
}
}
}
请注意添加的
新约束。BaseEntity类只希望ValueProviderType实现IProvideValue。它不知道这是什么课。。。如果它是一个类(可能是一个结构??)
如果添加“new()”约束并实例化“ValueProviderType”的实例会怎么样
public class BaseEntity<ValueProviderType> where ValueProviderType : IProvideValue,new()
{
public ValueProviderType Provider
{
get{
return new ValueProviderType(); // doesnt´t compile
}
}
}
公共类BaseEntity,其中ValueProviderType:IProvideValue,new()
{
公共价值提供者类型提供者
{
得到{
返回新的ValueProviderType();//未编译
}
}
}
BaseEntity类只希望ValueProviderType实现IProvideValue。它不知道这是什么课。。。如果它是一个类(可能是一个结构??)
如果添加“new()”约束并实例化“ValueProviderType”的实例会怎么样
public class BaseEntity<ValueProviderType> where ValueProviderType : IProvideValue,new()
{
public ValueProviderType Provider
{
get{
return new ValueProviderType(); // doesnt´t compile
}
}
}
公共类BaseEntity,其中ValueProviderType:IProvideValue,new()
{
公共价值提供者类型提供者
{
得到{
返回新的ValueProviderType();//未编译
}
}
}
+1:我要添加的唯一其他点是泛型类型参数的命名约定。+1:我要添加的唯一其他点是泛型类型参数的命名约定。