文档章节

泛型

 轻轻的走过
发布于 03/27 11:14
字数 914
阅读 23
收藏 0

泛型(Generic)的特性

使用泛型是一种增强程序功能的技术,具体表现在以下几个方面:

  • 它有助于您最大限度地重用代码、保护类型的安全以及提高性能。
  • 您可以创建泛型集合类。.NET 框架类库在 System.Collections.Generic 命名空间中包含了一些新的泛型集合类。您可以使用这些泛型集合类来替代 System.Collections 中的集合类。
  • 您可以创建自己的泛型接口、泛型类、泛型方法、泛型事件和泛型委托。
  • 您可以对泛型类进行约束以访问特定数据类型的方法。
  • 关于泛型数据类型中使用的类型的信息可在运行时通过使用反射获取。

1、基本运用

//创建一个类处理int类型或double类型或其他类型的相加
class ClassA<T>     //T为未知的类型(也就是一个数据类型),可能是int,也可能是double
{                   //当使用ClassA进行构造时,需要指定T的类型
    private T a;
    private T b;
    public ClassA(T a, T b)     //构造函数
    {
        this.a = a, this.b = b;
    }
    public string GetSum()
    {
        return a + " " + b;
    }
}

var o1 = new ClassA<int>(12,34);    //当我们利用泛型类构造时,需要指定泛型的类型
string s1 = o1.GetSum();
var o2 = new ClassA<string>("WWW.","google.com")
string s2 = o2.GetSum();

//实现了任意类型组拼成字符串的方法,可以是int,double,string等类型
public static string GetSum<T>(T a,T b){
    return  a + "" + b;
} 
Console.WritrLine(GetSum(12,34));

//多种类型的定义
public static string GetSum2<T1, T2, T3>(T1 a, T2 b, T3 c)
{
    return a + "" + b + ""  + c;//定义了三种参数,三种都使用
}
Console.WriteLine(GetSum<int,double,string>(2,2.1,"34"));

2、委托

using System;
using System.Collections.Generic;

delegate T NumberChanger<T>(T n);
namespace GenericDelegateAppl
{
    class TestDelegate
    {
        static int num = 10;
        public static int AddNum(int p)
        {
            num += p;
            return num;
        }

        public static int MultNum(int q)
        {
            num *= q;
            return num;
        }
        public static int getNum()
        {
            return num;
        }

        static void Main(string[] args)
        {
            // 创建委托实例
            NumberChanger<int> nc1 = new NumberChanger<int>(AddNum);
            NumberChanger<int> nc2 = new NumberChanger<int>(MultNum);
            // 使用委托对象调用方法
            nc1(25);
            Console.WriteLine("Value of Num: {0}", getNum());
            nc2(5);
            Console.WriteLine("Value of Num: {0}", getNum());
            Console.ReadKey();
        }
    }
}

结果

Value of Num: 35
Value of Num: 175

 

3、集合

约束 说明

T:struct

类型参数必须是值类型。可以指定除 Nullable 以外的任何值类型。

T:class

类型参数必须是引用类型,包括任何类、接口、委托或数组类型。

T:new()

类型参数必须具有无参数的公共构造函数。当与其他约束一起使用时,new() 约束必须最后指定。

T:<基类名>

类型参数必须是指定的基类或派生自指定的基类。

T:<接口名称>

类型参数必须是指定的接口或实现指定的接口。可以指定多个接口约束。约束接口也可以是泛型的。

T:U

为 T 提供的类型参数必须是为 U 提供的参数或派生自为 U 提供的参数。这称为裸类型约束.

样例

        public static THD<Object> trans_http_data(string jsonText)
        {
            THD<Object> rb = JsonConvert.DeserializeObject<THD<Object>>(jsonText);
            return rb;
        }

        public class THD<T> where T : new()
        {
            public string error_code { get; set; }
            public string reason { get; set; }
            public T result { get; set; }
        }

        private class LHL
        {
            public string id { get; set; }
            public string baiji { get; set; }  //接口类型
            public string chongsha { get; set; }
            public string ji { get; set; }
            public string jishen { get; set; }
            public string wuxing { get; set; }
            public string xiongshen { get; set; }
            public string yangli { get; set; }
            public string yi { get; set; }
            public string yinli { get; set; }
        }

             

© 著作权归作者所有

下一篇: 错误收集
粉丝 6
博文 125
码字总数 74571
作品 0
西安
高级程序员
私信 提问
加载中

评论(0)

java泛型操作复习,以及讲解在android中使用的场景

android使用泛型的地方很多,比如集成自BaseAdapter实现封装的Adapter,对常用操作进行封装,但是需要对传进来的数据进行处理,此时就使用到泛型,示例如下: public abstract class EasyAdap...

青莲居士
2016/01/13
957
0
Java 泛型详解-绝对是对泛型方法讲解最详细的,没有之一

对java的泛型特性的了解仅限于表面的浅浅一层,直到在学习设计模式时发现有不了解的用法,才想起详细的记录一下。 本文参考java 泛型详解、Java中的泛型方法、 java泛型详解 1 概述 泛型在j...

hensemlee
2018/09/23
355
0
JAVA基础再回首(十六)——泛型的概述、使用、泛型类、泛型方法、泛型接口、泛型高级(通配符)

JAVA基础再回首(十六)——泛型的概述、使用、泛型类、泛型方法、泛型接口、泛型高级(通配符) 版权声明:转载必须注明本文转自程序员杜鹏程的博客:http://blog.csdn.net/m366917 周末是提升...

Aduroidpc
2016/08/21
0
0
swift4.1 系统学习二十一 泛型

/* 泛型 本节我们一起学习泛型这一概念。在项目中,多次用到了泛型,但是对它的理解总是不够透彻,运用也不熟练。 趁此机会,好好熟悉一下。 什么是泛型? 比如我们要实现一种算法,例如搜索...

小曼Study
2018/10/29
0
0
08-利用思维导图梳理JavaSE-泛型

08-利用思维导图梳理JavaSE-泛型 主要内容 1.泛型的基本概念 1.1.定义 1.2.使用前提 1.3.使用泛型的好处 2.泛型的使用 2.1.泛型类定义 2.2.泛型对象定义 2.3.泛型中的构造方法 2.4.泛型方法的...

飞鱼说编程
2018/09/20
50
0

没有更多内容

加载失败,请刷新页面

加载更多

基于 rsync 和 ln 实现“写时复制”的快照备份功能

一、基本原理 这里“写时复制”加了一个引号,因为这是专门针对使用rsync备份时的写时复制效果,而不是事实上的写时复制(copy-on-write),其达到的目的如下: 使用 rsync 备份数据后,立即...

Inpool
14分钟前
17
0
郑州哪哪里可以开工程款发票-郑州_新闻网

【电薇同步;1.3.8 - 2.7.4.1 - 5.2.9.7.】张生、诚、信、合、作,保、真、售、后、保、障、长、期、有、效。adb的全称为Android Debug Bridge,是Android手机通用...

yyqqvip
今天
30
0
Nginx 反向代理访问

在Nginx 配置 server { listen 80; server_name www.xiaocx.org www.xiaocx.org www.xiaocx.org; root /Users/maison/work/xiaocx/dist; index i......

韩庚庚
今天
33
0
python笔记:环境变量已设置CMD中一直报错"python"不是内部命令,也不是可运行的程序或批处理文件

这些天虽然也写了几个小工具,但是打包都是在anaconda prompt中完成的,因为CMD中一直报错"python"不是内部命令,也不是可运行的程序或批处理文件,各种查度,千篇一律的是环境变量配置的问题...

小玲_001
今天
13
0
AI+BI服务模式

术语与缩写解释 缩写、术语 解 释 BI 商业智能(Business Intelligence,简称:BI),又称商业智慧或商务智能,指用现代数据仓库技术、线上分析处理技术、数据挖掘和数据展现技术进行数据分析...

zoegu228
今天
28
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部