• 泛型


    1.前言

      面向对象语言三大特性:封装,继承,多态

      object是所有类型的父类,任何父类出现的地方,都可以用子类来代替

      例如:

        函数定义如下:

    public static void igetData(int t)
    {
    Console.WriteLine("data={0},,type={1}", t, t.GetType());

    }
    public static void sgetData(string t)
    {
    Console.WriteLine("data={0},,type={1}", t, t.GetType());

    }
    public static void pgetData(People t)
    {
    Console.WriteLine("data={0},,type={1}", t, t.GetType());

    }
    public static void ogetData(object t) //任何父类出现的地方,都可以用子类来代替,所有参数t可以是任何类型,既可以使用这一个函数实现上面三个函数的功能
    {
    Console.WriteLine("data={0},,type={1}", t, t.GetType());
    }

    执行代码:

    People people = new People()
    {
    id = 1,
    name = "kxy"
    };
    Common.igetData(3);//调用原本定义的函数
    Common.sgetData("hello");
    Common.pgetData(people);

    Common.ogetData(3);//调用objec函数
    Common.ogetData("hello");
    Common.ogetData(people);

    执行结果一样:

    但是这种方法有一个装箱和拆箱的操作,对性能有一定的损失,所以我们引入泛型的概念。

    2.泛型

      延迟制定类型,把类型的指定推迟到编译阶段,函数如下:

    public static void tgetData<T>(T t)
    {
    Console.WriteLine("data={0},,type={1}" ,t,t.GetType());
    }

    执行代码:

    Common.tgetData(3);
    Common.tgetData("hello");
    Common.tgetData(people);

    结果也相同

    也可以在调用函数时制定它的类型:

    Common.tgetData<int>(3);
    Common.tgetData<string>("hello");
    Common.tgetData<People>(people);

    泛型方法编译时根据调用函数生成该函数传值类型对应的原函数,所以说泛型只是一个语法糖,没有性能损失。

     3.泛型的返回

    public static T GetT<T>(T t)
    {
    return t;

    //return default(T); //根据T的类型,返回一个T的默认值;引用类型默认返回null,如string类型;值类型返回0(不一定全是),如int类型
    }

    4.泛型类

    5.泛型接口

    6.泛型委托

    7.泛型的约束

    public static T GetT<T>(T t) where T:class //约束泛型为引用类型
    {
    return default(T);
    }

    即参数无法使用int这种值类型

    public static T Query<T>(T t) where T :struct //约束泛型为值类型
    {
    return default(T);
    }

    即参数无法使用string这种引用类型

    public static T GetT<T>(T t) where T:class,new()//使引用类型可以new对象,当然该类型必须有构造函数才可以,即string这种无构造函数的会报错,可以传people参数
    {
    T tt = new T();
    return tt;
    }

    public static void sayHello<T>(T t) where T:People //具体约束类型

  • 相关阅读:
    云计算和大数据时代网络技术揭秘(八)数据中心存储FCoE
    云计算和大数据时代网络技术揭秘(七)大二层网络
    云计算和大数据时代网络技术揭秘(六)LISP协议
    云计算和大数据时代网络技术揭秘(五)可靠的网络
    云计算和大数据时代网络技术揭秘(四)网络加密
    云计算和大数据时代网络技术揭秘(三)安全的网络准入
    python3练习100题——027
    python3练习100题——026
    python3练习100题——025
    python3练习100题--024
  • 原文地址:https://www.cnblogs.com/wskxy/p/9103552.html
Copyright © 2020-2023  润新知