Farseer

导航

Covariant in C#

covariant可以理解为变异.也就是一种类型转换成另一种类型.
Anders在<<The C# Promgramiming Language>>的数组一章中提到了数组的变异.
如果一个引用类型A可以隐式或者显式地转化为B,则A[R]也可以转化成B[R],R可以任意指定,但A,B必须相同,这种关系称为数组变异.数组变异不能推广到值类型,比如不能从int[]转化成object[],也不能从byte[]转化成int[].
今天在Bill Wanger的blog上发现了一篇帖子,说的是函数返回类型的变异,C#不支持函数返回类型的变异,比如下面的代码是不能通过变异的
class ClassParent
    
{
        
static void Main()
        
{

        }

        
protected virtual ClassParent GetThing()
        
{
            
return null;
        }

                
    }


    
class ClassSon:ClassParent
    
{
        
protected override ClassSon GetThing()
        
{
            
return null;
        }

    }

编译时会报错,当方法重载是不能改变返回类型,这在C++中是支持的.
Bill Wanger说可以用一个范型接口来实现, 俺的C#是1.1的不支持范型,不过也把代码粘在下面
public interface Producer<T>
    
{
        T getThing();
    }


    
public class D : Producer <D>
    
{
        
public D getThing()
        
{
            
return null;
        }

    }

这样如果适当限制T的取值,可以利用范型实现C++的函数返回类型的变异.

posted on 2005-11-21 18:34  佛西亚  阅读(415)  评论(0编辑  收藏  举报