检查泛型类型及其类型参数
1、获取泛型类型
//类型1 Type d1 = typeof(Dictionary<,>); Dictionary<string, Example> d = new Dictionary<string, Example>(); //类型2 Type d2=d.GetType();
2、判断是否为泛型,是否为泛型类型定义
Console.WriteLine(" Is this a generic type? {0}", d1.IsGenericType); //IsGenericType 判断是泛型类型 Console.WriteLine(" Is this a generic type definition? {0}", d1.IsGenericTypeDefinition); //IsGenericTypeDefinition 判断是泛型类型定义 //以上两个结果都为True. 对于类型d2来说,IsGenericType=true,IsGenericTypeDefinition=false.
3、使用 GetGenericArguments 方法获取包含泛型类型参数的数组。
Type[] typeParameters = d1.GetGenericArguments(); //获取到两个泛型中的参数,如上为两个参数Tkey,TValue
Type[] typeParameters = d2.GetGenericArguments(); //也是两个参数:string,Example
4、对于每个类型实参,使用 IsGenericParameter 属性确定它是类型形参(例如,在泛型类型定义中),还是为类型形参指定的类型(例如,在构造类型中)。
foreach( Type tParam in d1.GetGenericArguments()) { if (tParam.IsGenericParameter) { DisplayGenericParameter(tParam); } else { Console.WriteLine(" Type argument: {0}", tParam); } } //对d1类型来说,IsGenericParameter 返回参数都为true //对d2类型来说,IsGenericParameter 返回参数都为false,因为都是已经指定的类型。
5、d1 和 d2 如何转化
//下面两种方式获取泛型的类型 // //使用typeof操作符创建泛型类型,省略参数,但要用逗号分隔 Type d1 = typeof(Dictionary<,>); // 使用构造函数获取泛型类型,这里确定key string类型,value为定义的一个class Dictionary<string, Example> d2 = new Dictionary<string, Example>(); Type d3 = d2.GetType(); //通过GetGenericTypeDefinition方法可以获取到泛型定义 //以上d1==d4 Type d4 = d3.GetGenericTypeDefinition(); //根据d1得到d4,首先定义两个类型的参数 Type[] typeArgs = {typeof(string), typeof(Example)}; //调用 MakeGenericType 方法,将类型实参绑定到类型形参,然后构造类型 Type constructed = d1.MakeGenericType(typeArgs); //反射实例化 object o = Activator.CreateInstance(constructed); d3==typeof(o) 也为true
相关推荐
在这个特定的案例中,"基于泛型反射的数据层封装"是利用了Java的泛型和反射特性来实现这一目标。泛型提供了一种在编译时类型安全的方式,允许我们创建可以处理多种类型的类、接口和方法。而反射则是Java提供的一种...
先说一下遇到的问题:通过使用GSON泛型进行报文转换的时候想要对部分关键字段加密,发现在封装好的方法中,对个别字段的加密满足不了。 解决过程:首先通过反射获取到bean下的对象名称。 对象名称获取到了之后需要...
泛型和反射是Java编程语言中的两个重要特性,它们各自有着独特的功能,但在某些场景下也可以结合使用。本文将深入探讨这两个概念以及相关的使用方法。 首先,我们来了解泛型。泛型是Java 5引入的一项特性,它允许在...
在C#编程中,泛型和反射是两种强大的特性,它们各自有着独特的功能,并且在特定情况下可以结合使用,以实现更加灵活和高效的代码。本文将深入探讨这两个概念及其联合应用。 首先,让我们理解什么是泛型。泛型是C# ...
反射和泛型是一种重要的解决途径。 此代码是一个生成泛型对象的类。 比如: Pool<Point> pool = new Pool(){}; Point p = pool.get(x, y); //在此构造Point对象 ... pool.put(p); 希望能帮助那些为查找泛型构造器、...
JAVA中 关于泛型 以及反射的例子 欢迎下载 一起研究
同时,因为反射会带来性能损失,因此,可根据自己需求,针对每个类型轻松在两种模式之前切换,本例源码,测试实例俱全,而且代码浅显易懂,只要对泛型、反射、三层架构有一定了解的人都能轻松学习
Java基础入门系列是帮助初学者掌握Java编程的重要学习材料,本篇主要介绍了泛型、反射和注解这三大高级特性。 泛型是Java SE 5版本引入的一个新特性,它的主要目的是允许在使用类、接口和方法时能够引用到任何类型...
对java泛型以及反射机制进行原理和应用上的讲解,帮助初学者对这两个概念进行更轻松的掌握
在C#中通过反射操作一个List泛型。。
2. 泛型 + 反射:泛型可以与反射结合使用,通过反射的API来获取T的Class。 3. 收敛:泛型可以增加类型安全,减少了强制类型转换的代码。 4. MetaProgramming:泛型可以在编译期搞很多东西,比如MetaProgramming。 ...
基本
在Java编程语言中,泛型和反射是两个非常重要的特性,它们可以极大地提高代码的复用性和灵活性。本文将深入探讨如何结合这两种技术实现一个通用的DAO(Data Access Object)设计模式。 首先,我们来看“泛型”。...
反射+泛型+三层 ^-^^-^^-^^-^^-^^-^^-^^-^^-^^-^^-^^-^^-^^-^^-^^-^^-^^-^^-^^-^^-^^-^^-^^-^^-^^-^^-^^-^^-^^-^^-^^-^^-^
Java 5 引入了泛型和反射两个重要的特性,极大地增强了编程的灵活性和安全性。泛型主要是为了解决在编程中频繁进行类型转换的问题,而反射则允许程序在运行时动态地获取类的信息和调用方法。 泛型类型: 在 Java 5 ...
本篇文章将详细探讨C#中的泛型、反射以及如何利用这些特性来实现自动生成SQL语句。 **一、C# 泛型** 泛型是C#的一个核心特性,它允许我们编写类型参数化的代码,即代码可以在多种数据类型上工作,而无需进行显式的...
系统的核心技术包括泛型反射和泛型Ado.net,这两种技术的应用极大地提高了系统的灵活性和性能。 首先,我们要理解什么是泛型。在.NET框架中,泛型是一种强大的工具,它允许我们在不指定具体数据类型的情况下创建类...
Java 中利用泛型和反射机制抽象DAO的实例 Java 中利用泛型和反射机制抽象DAO的实例是指在 Java 中使用泛型和反射机制来抽象出一个通用的DAO(Data Access Object),从而将DAO抽象到另一层次,提高代码的质量和可...
鉴于使用三层架构的过程中,数据库变动造成大量代码改动的问题,特意对三层架构进行了改进,数据库变动只需要简单...本例源码,测试实例俱全,而且代码浅显易懂,只要对泛型、反射、三层架构有一定了解的人都能轻松学习
使用反射和泛型,我们可以编写一个通用方法,接收`DataReader`和类型信息作为参数,然后逐行读取数据,利用反射实例化指定类型的对象并设置属性值。 示例代码可能如下: ```csharp public static T ...