`
wyf
  • 浏览: 436407 次
  • 性别: Icon_minigender_1
  • 来自: 唐山
社区版块
存档分类
最新评论

泛型反射

    博客分类:
  • C#
阅读更多

检查泛型类型及其类型参数

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

 

 

分享到:
评论

相关推荐

    基于泛型反射的数据层封装+MSSQLJDBC3.0驱动

    在这个特定的案例中,"基于泛型反射的数据层封装"是利用了Java的泛型和反射特性来实现这一目标。泛型提供了一种在编译时类型安全的方式,允许我们创建可以处理多种类型的类、接口和方法。而反射则是Java提供的一种...

    java泛型反射注解

    先说一下遇到的问题:通过使用GSON泛型进行报文转换的时候想要对部分关键字段加密,发现在封装好的方法中,对个别字段的加密满足不了。 解决过程:首先通过反射获取到bean下的对象名称。 对象名称获取到了之后需要...

    泛型 反射 相关概念方法使用

    泛型和反射是Java编程语言中的两个重要特性,它们各自有着独特的功能,但在某些场景下也可以结合使用。本文将深入探讨这两个概念以及相关的使用方法。 首先,我们来了解泛型。泛型是Java 5引入的一项特性,它允许在...

    泛型反射联合使用.zip

    在C#编程中,泛型和反射是两种强大的特性,它们各自有着独特的功能,并且在特定情况下可以结合使用,以实现更加灵活和高效的代码。本文将深入探讨这两个概念及其联合应用。 首先,让我们理解什么是泛型。泛型是C# ...

    利用反射生成泛型类对象

    反射和泛型是一种重要的解决途径。 此代码是一个生成泛型对象的类。 比如: Pool&lt;Point&gt; pool = new Pool(){}; Point p = pool.get(x, y); //在此构造Point对象 ... pool.put(p); 希望能帮助那些为查找泛型构造器、...

    泛型反射例子

    JAVA中 关于泛型 以及反射的例子 欢迎下载 一起研究

    基于泛型和反射的三层架构雏形(另一个旧版不能删除)

    同时,因为反射会带来性能损失,因此,可根据自己需求,针对每个类型轻松在两种模式之前切换,本例源码,测试实例俱全,而且代码浅显易懂,只要对泛型、反射、三层架构有一定了解的人都能轻松学习

    Java基础入门四泛型反射注解.pdf

    Java基础入门系列是帮助初学者掌握Java编程的重要学习材料,本篇主要介绍了泛型、反射和注解这三大高级特性。 泛型是Java SE 5版本引入的一个新特性,它的主要目的是允许在使用类、接口和方法时能够引用到任何类型...

    java泛型和反射机制

    对java泛型以及反射机制进行原理和应用上的讲解,帮助初学者对这两个概念进行更轻松的掌握

    C#中通过反射操作泛型

    在C#中通过反射操作一个List泛型。。

    Java泛型的用法及T.class的获取过程解析

    2. 泛型 + 反射:泛型可以与反射结合使用,通过反射的API来获取T的Class。 3. 收敛:泛型可以增加类型安全,减少了强制类型转换的代码。 4. MetaProgramming:泛型可以在编译期搞很多东西,比如MetaProgramming。 ...

    枚举泛型反射以及一些基本

    基本

    java 基于泛型与反射的通用 DAO

    在Java编程语言中,泛型和反射是两个非常重要的特性,它们可以极大地提高代码的复用性和灵活性。本文将深入探讨如何结合这两种技术实现一个通用的DAO(Data Access Object)设计模式。 首先,我们来看“泛型”。...

    反射+泛型+三层例子

    反射+泛型+三层 ^-^^-^^-^^-^^-^^-^^-^^-^^-^^-^^-^^-^^-^^-^^-^^-^^-^^-^^-^^-^^-^^-^^-^^-^^-^^-^^-^^-^^-^^-^^-^^-^^-^

    JAVA5泛型和反射

    Java 5 引入了泛型和反射两个重要的特性,极大地增强了编程的灵活性和安全性。泛型主要是为了解决在编程中频繁进行类型转换的问题,而反射则允许程序在运行时动态地获取类的信息和调用方法。 泛型类型: 在 Java 5 ...

    C#泛型、反射实例、自动生成sql语句

    本篇文章将详细探讨C#中的泛型、反射以及如何利用这些特性来实现自动生成SQL语句。 **一、C# 泛型** 泛型是C#的一个核心特性,它允许我们编写类型参数化的代码,即代码可以在多种数据类型上工作,而无需进行显式的...

    人才招聘网

    系统的核心技术包括泛型反射和泛型Ado.net,这两种技术的应用极大地提高了系统的灵活性和性能。 首先,我们要理解什么是泛型。在.NET框架中,泛型是一种强大的工具,它允许我们在不指定具体数据类型的情况下创建类...

    Java 中利用泛型和反射机制抽象DAO的实例

    Java 中利用泛型和反射机制抽象DAO的实例 Java 中利用泛型和反射机制抽象DAO的实例是指在 Java 中使用泛型和反射机制来抽象出一个通用的DAO(Data Access Object),从而将DAO抽象到另一层次,提高代码的质量和可...

    基于泛型和反射的三层架构雏形

    鉴于使用三层架构的过程中,数据库变动造成大量代码改动的问题,特意对三层架构进行了改进,数据库变动只需要简单...本例源码,测试实例俱全,而且代码浅显易懂,只要对泛型、反射、三层架构有一定了解的人都能轻松学习

    DataReader反射泛型实体对象

    使用反射和泛型,我们可以编写一个通用方法,接收`DataReader`和类型信息作为参数,然后逐行读取数据,利用反射实例化指定类型的对象并设置属性值。 示例代码可能如下: ```csharp public static T ...

Global site tag (gtag.js) - Google Analytics