zoukankan      html  css  js  c++  java
  • C#范型入门

    范型是Microsoft.NET 2.0里面一个新加的内容,它使得C#语言更加完美。鉴于范型这个概念炒作炒得太虚,而缺少实际例子,使得很多菜鸟搞不懂这个概念,所以我来详细说明1个例子程序,大家就能明白了。
    一、首先在VS2005环境里面新建一个控制台应用程序(Console)
    二、完成如下代码:

    static void Main(string[] args)
    {
        PrintInt(
    1);
        PrintString(
    "a");
        PrintAll1(
    2"b");
        PrintAll2
    <int>(3);
        PrintAll2
    <string>("c");
        PrintAll2(
    4);
        PrintAll2(
    "d");
        PrintAll2(
    5.5);
        Console.ReadLine();
    }

    static void PrintInt(int x)
    {
        Console.WriteLine(x);
    }

    static void PrintString(string y)
    {
        Console.WriteLine(y);
    }

    static void PrintAll1(int x, string y)
    {
        Console.WriteLine(x);
        Console.WriteLine(y);
    }

    static void PrintAll2<T>(T x)
    {
        
    if (typeof(T) == typeof(int))
        {
            Console.WriteLine(x);
        }
        
    else if (typeof(T) == typeof(string))
        {
            Console.WriteLine(x);
        }
        
    else
        {
            Console.WriteLine(
    "Error");
        }
    }

     三、代码说明:
    Void Main是Console控制台应用的程序入口,这个大家都应该知道吧,然后Console.WriteLine一个int型变量是允许的,不用x.ToString(),Console.ReadLine()目的是为了停止屏幕,方便查看运行结果。下面说正题:
    作为一个普通的方法,PrintInt是打印一个数字,PrintString是打印一个字符串,但是如果我需要一个方法,既能打印数字,又能打印字符串呢,那就是PrintAll1这个方法,它同时接收整型、字符串型2个变量,然后分两行显示。如果我的要求更苛刻,我需要一个方法,除了既能打印数字又能打印字符串之外,还必须有且只有1个参数,不考虑结构体什么的,实现这样子的东西,就叫范型。理智的说,普通方法传递不同值变量,范型方法传递不同类型的变量,上面这个例子,就是从范型方法。当然范型技术还能用在类上面,为了入门,先不说这些,从范型方法入手。
    PrintAll2就是范型方法,记住范型方法的书写格式,先定义一个未知类型T,写在方法名后面的尖括号里,然后参数是这个未知类型T的实例,然后方法里面的代码逻辑就是判断这个T到底是啥类型,然后根据不同类型,做出不同判断,执行不同代码。那么如何调用这个范型方法呢?我在void Main里面调用了PrintAll2五次,PrintAll2<int>(3)指定了参数就是整型的,PrintAll2<string>("c")指定了参数就是字符串,PrintAll2(4)和PrintAll2("d")没有明说参数是啥类型,但是程序会通过参数自动判断类型,得到正确的结果,PrintAll2(5.5)由于范型方法里面没有写该怎么处理浮点型,所以打印Error。

  • 相关阅读:
    JavaWeb项目自动部署,持续集成
    hbase系列
    传输视频的带宽如何计算?传输4K视频需要多少带宽?
    TSINGSEE青犀视频通过Webrtc编译android版本找不到gzip模块如何处理?
    TSINGSEE青犀视频webrtc相关内容编译如何在c++端编码出H264?
    视频组网/网络穿透工具EasyNTS如何永久删除其中某个设备?
    音视频流媒体平台的开发,开源EasyDarwin为什么如此受欢迎?
    基于音视频的云会议为什么会迎来发展的大爆发?
    EasyRTC的Web开发过程中如何创建新的空分支?
    C# 会话,进程,线程,线程安全
  • 原文地址:https://www.cnblogs.com/chuncn/p/1082409.html
Copyright © 2011-2022 走看看