• 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++的函数返回类型的变异.
  • 相关阅读:
    UNIGUI与UNIURLFRAME的互动
    unigui结合JS方法记录
    如何将uniurlframe中html调用delphi的函数
    XE下显示托盘图标(TrayIcon)
    Delphi fmx控件在手机滑动与单击的问题
    Delphi使用iTools安卓模拟器
    Delphi调用SQL分页存储过程实例
    分享Pos函数(比FastPos还要快)
    Delphi Excel导入 的通用程序转载
    Delphi控件cxGrid 如何动态创建列?
  • 原文地址:https://www.cnblogs.com/Farseer1215/p/281541.html
Copyright © 2020-2023  润新知