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++的函数返回类型的变异.
  • 相关阅读:
    Sublime Text 3 安装及常用插件配置
    利用事件对象实现线程同步
    基于UDP(面向无连接)的socket编程
    基于TCP(面向连接)的socket编程
    基于TCP(面向连接)的socket编程
    响应式布局之媒体查询 @media
    (function($){})(jQuery)---Javascript的神级特性:闭包
    noConflict()
    $.extend()与$.fn.extend()
    Web中的宽和高
  • 原文地址:https://www.cnblogs.com/Farseer1215/p/281541.html
Copyright © 2011-2022 走看看