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

       }
  • 相关阅读:
    【STL】各容器成员对比表
    C/C++ 笔试、面试题目大汇总2
    运维
    Docker_基础运用
    IntelliJ_idea_Ultimate_2018.1_windows
    python_IED工具下载(pycharm)_windows版
    排序_归并排序_递归
    递归_汉诺塔问题
    递归_变位字
    递归_三角数字和阶乘
  • 原文地址:https://www.cnblogs.com/GeeWu/p/CSharp_Generac.html
Copyright © 2011-2022 走看看