zoukankan      html  css  js  c++  java
  • DotNet编程小结:(1)C#的泛型

    C#泛型是我学JavaC++这些静态语言中,最强大的没有之一。当然比起动态语言PythonPHPJavascript就差远了。

    1, delegate的泛型。Action<in TDataType> 通用代理方法原型void function ( TDatatype input);


    public delegate void Action<in T>(

           T obj

    )

    以前我们使用delegate的时候。过程如下:


    //声明

    delegate void DisplayMessage(string message);

     

    private static void ShowWindowsMessage(string message)

       {

          MessageBox.Show(message);      

       }

     

    public static void Main()

       {

          
    //定义

          DisplayMessage messageTarget; 

     

          
    //赋值

          
    if (Environment.GetCommandLineArgs().Length > 1)

             messageTarget 
    = ShowWindowsMessage;

          
    else

             messageTarget 
    = Console.WriteLine;

     

          
    //运行

          messageTarget(
    "Hello, World!");   

       }      


    使用Action<in T>( T obj)之后,就去掉了声明Delegate方法的步骤:

     
    private static void ShowWindowsMessage(string message)

       {

          MessageBox.Show(message);      

       }

     

    public static void Main()

       {

          
    //定义

          Action
    <String> messageTarget; 

     

          
    //赋值

          
    if (Environment.GetCommandLineArgs().Length > 1)

             messageTarget 
    = ShowWindowsMessage;

          
    else

             messageTarget 
    = Console.WriteLine;

     

          
    //运行

          messageTarget(
    "Hello, World!");   

       }     

    但是如果我的方法有多个参数怎么办?别担心,微软为我们写了T1-T16参数的Action的东东,膜拜中。

    2, Fun<TDataType, out TResult> 有返回值的方法泛型, 方法的原型是 TResult function(TDataType input)


    public delegate TResult Func<in T, out TResult>(

           T arg

    )

    以前我们使用delegate的时候。过程如下:


    //声明

    delegate string ConvertMethod(string inString);

     

     

     
    private static string UppercaseString(string inputString)

       {

          
    return inputString.ToUpper();

       }

     

     

    public static void Main()

       {

          
    //定义和赋值

     ConvertMethod convertMeth 
    = UppercaseString;

          
    string name = "Dakota";

          
    //应用

    Console.WriteLine(convertMeth(name));

       }

    使用Fun<TTResult>( T obj)之后,就去掉了声明Delegate方法的步骤:


    private static string UppercaseString(string inputString)

       {

          
    return inputString.ToUpper();

       }

     

     

    public static void Main()

       {

          
    //定义和赋值

     Fun
    <String,String> convertMeth = UppercaseString;

     
    //匿名方法:

    // convertMeth = delegate(string s){ return s.ToUpper();}; 

    //Lambda表达式,更多参考:http://msdn.microsoft.com/zh-cn/library/bb397687.aspx

         
    //convertMeth = s =>{ return s.ToUpper();};

          
    string name = "Dakota";

          
    //应用

    Console.WriteLine(convertMeth(name));

       }
  • 相关阅读:
    Dedecms(织梦)文章内容页和图片集内容页,调用缩略图的方法
    如何修改织梦dedecms文章标题的最大长度
    织梦自定义表单后台管理增加全选功能,批量删除垃圾留言信息
    自定义表单SQL命令行批量删除垃圾留言
    织梦后台卡死的原因分析及开关功能解决办法
    织梦网站迁移的几种方法
    Dedecms(织梦)文章内容页和图片集内容页,调用缩略图的方法
    织梦CMS被挂马特征汇总
    DedeCMS模板中用彩色tag做彩色关键词
    HDU6038
  • 原文地址:https://www.cnblogs.com/GeeWu/p/CSharp_Generac.html
Copyright © 2011-2022 走看看