C# 泛型
泛型就是为了编写与类型无关的代码. 与C++中的泛型是一个概念.
在声明泛型方法/泛型类,可以给泛型加上一定的约束来满足我们特定的一些条件
比如:
using System;
using System.Web.Caching;
namespace Demo.CacheManager
{
public class CacheHelper<T> where T:new()
{
}
}
where T : xxx
来限定泛型.
泛型限定条件:
- T:结构(类型参数必须是值类型。可以指定除 Nullable 以外的任何值类型)
- T:类 (类型参数必须是引用类型,包括任何类、接口、委托或数组类型)
- T:new() (类型参数必须具有无参数的公共构造函数。当与其他约束一起使用时new() 约束必须最后指定)
- T:<基类名> 类型参数必须是指定的基类或派生自指定的基类
- T:<接口名称> 类型参数必须是指定的接口或实现指定的接口。可以指定多个接口约束。约束接口也可以是泛型的。
C# type类
Type类,是一个用来存储类型的特性和信息的类。
对于程序中的每一个类型,都会有他自己的类信息,而根据Type提供的书信和方法获得这个类型的一切信息,包括字段,属性,事件,参数,构造函数等。
生成Typde对象
Type type = typeof(Test);
Test test= new Test();
Type type2 = Test.GetType();
获取该类型的信息
//类的名称
string name = type.Name;
//类的命名空间
string space = type.Namespace;
//类的程序集
Assembly assembly = type.Assembly;
//类的共有字段
FieldInfo[] fieldInfos = type.GetFields();
//类的属性
PropertyInfo[] propertyInfos = type.GetProperties();
//类的方法
MethodInfo[] methodInfos = type.GetMethods();
typeof 和GetType的区别
- C#中任何对象都具有GetType()方法,它的作用和typeof()相同,返回Type类型的当前对象的类型
- typeof(x)中的x,必须是具体的 类名、类型名称 等(int ,string,自定义类等等),不可以是变量名称;
- GetType()是基类System.Object的方法,因此
只有建立一个实例之后才能够被调用
- typeof是运算符,GetType是一个实例的方法;