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

       }
  • 相关阅读:
    Nginx的状态统计、目录保护、访问控制
    nginx如何解析php?
    CentOS6 搭建LNMP环境
    nginx的工作原理和工作模式
    shell脚本--逐行读取文件内容
    nginx配置文件中的的逻辑关系
    SecureCRT 拷贝时弹出 "Could not open clipboard: Assess is denied"
    Markdown的超链接由新窗口打开
    nginx查找模块、配置指令
    nginx: error while loading shared libraries: libpcre.so.1: cannot open shared object file: No such file or directory
  • 原文地址:https://www.cnblogs.com/GeeWu/p/CSharp_Generac.html
Copyright © 2011-2022 走看看