C4.0和VS2010新特性(3)
时间:2025-04-20
时间:2025-04-20
介绍VS2010的新特性等一些新功能
{
void Input(V value);
T Output();
}
class Program<T,V>:InAndOut<T,V>
{
private object value = default(V);
public T Output()
{
return (T)value;
}
public void Input(V tv)
{
value = tv;
}
}
又假如我们已经实例化两个接口的实例:
InAndOut<Father, Son> iobj1 = new Program < Father, Son >();
InAndOut<Son, Father> iobj2 = new Program < Son, Father >();
现在我们令:iobj1= iobj2,可行吗?
乍一看似乎可行——为什么呢?因为联想到右边的两个子类Son会被自动隐式转化成其父类Father。就好像是Father f = new Son()一样可以(注意:我们把子类隐式转化成父类成为“协变”,反之成为“反变”)。而且,根据接口定义,输入方向是接受一个Son(实际存储在iobj2中,被隐式转成Father),输出的时候还是存储的Son被隐式转化成Father输出。
这种思考逻辑固然没有错,但是它有一个前提条件——即从iobj1输入方向看,必须是Son到Father,输出的话也必须是Son到Father!但是泛型仅仅是一个定义,谁能够保证在类中Father或者Son一定是输入(或者是输出)参数呢?如果我们改变成以下的形式呢?
class Program<T,V>:InAndOut<T,V>
{
private object value = default(T);
public V Output()
上一篇:量表简介总结
下一篇:协信中心商业项目提案