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));

       }
  • 相关阅读:
    Online Conversion Advanced Roman Numeral Converter
    如何对CentOS FTP服务配置 51CTO.COM
    [CPyUG][OT]为什么mysqlpython 2010年以后未见更新啊. maolingzhi@gmail.com Gmail
    专业的智能解析 WEB DDOS防御提供商
    深入了解scanf()/getchar()/gets()/getch,getche sunysl的专栏 博客频道 CSDN.NET
    they're hiring
    linux下绘图工具dia,功能强劲直逼visio 潜入技术的海洋 51CTO技术博客
    北京网通dns地址服务器大全 产品/方案 net.ChinaUnix.net
    北京光环新网科技股份有限公司 IDC,ISP,CDN,专线,托管,机房,数据中心,光纤接入
    lighttpd,thttpd,shttpd 轻量级WebServer介绍
  • 原文地址:https://www.cnblogs.com/GeeWu/p/CSharp_Generac.html
Copyright © 2011-2022 走看看