zoukankan      html  css  js  c++  java
  • 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++的函数返回类型的变异.
  • 相关阅读:
    如何优化数据库中数据的查询
    2句sql语句的比较
    未来五年程序员应当具备的十项技能
    中小IT企业如何留住80后技术人才
    ORACLE的sign函数和DECODE函数
    Windows Server 2008系统 安装Oracle 10g 错误
    ORACLE 错误 ora01830 解决方法
    oracle instr函数
    Oracle 9i安装时没有找到OCS4J.properties 解决办法
    C# 中的委托和事件
  • 原文地址:https://www.cnblogs.com/Farseer1215/p/281541.html
Copyright © 2011-2022 走看看