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

       }
  • 相关阅读:
    POJ2395 Out of Hay
    POJ2421 Constructing Roads
    POJ2031 Building a Space Station
    POJ1751 Highways
    [NOIP2007] 提高组 洛谷P1099 树网的核
    [NOIP2007] 提高组 洛谷P1005 矩阵取数游戏
    [NOIP2007] 提高组 洛谷P1097 统计数字
    [NOIP2007] 提高组 洛谷P1098 字符串的展开
    [NOIP2007] 普及组
    洛谷 通天系列 P1760 P1757 P1759
  • 原文地址:https://www.cnblogs.com/GeeWu/p/CSharp_Generac.html
Copyright © 2020-2023  润新知