泛型是什么?

  • 格式:pdf
  • 大小:81.44 KB
  • 文档页数:2

泛型是什么?

什么是泛型?

泛型是c#2.0的⼀个新增加的特性

所谓泛型是指将类型参数化以达到代码复⽤提⾼软件开发⼯作效率的⼀种数据类型。

⼀种类型占位符,或称之为类型参数。我们知道⼀个⽅法中,⼀个变量的值可以作为参数,但其实这个变量的类型本⾝也可以作为参数。泛

型允许我们在调⽤的时候再指定这个类型参数是什么。在.net中,泛型能够给我们带来的两个明显好处是——类型安全和减少装箱、拆箱。

C# 语⾔和公共语⾔运⾏时 (CLR) 在 2.0 版本中添加了泛型。泛型将类型参数的概念引⼊ .NET Framework,这样就可以设计具有相同特征

的类和⽅法:在客户端代码声明并初始化这些类和⽅法之前,这些类和⽅法会延迟指定⼀个或多个类型(使⽤占位符~3:数字代表类型参数

个数)。

泛型优点:更加安全,效率更⾼

泛型有什么⽤?

使⽤泛型类型可以最⼤限度地重⽤代码、保护类型安全性以及提⾼性能。泛型最常见的⽤途是创建集合类 List

可以创建:泛型接⼝、泛型类、泛型⽅法、泛型事件和泛型委托。

泛型约束有哪些?

where T : struct 类型参数必须是值类型。

where T : class 类型参数必须是引⽤类型。 此约束还应⽤于任何类、接⼝、委托或数组类型。

where T : unmanaged 类型参数不能是引⽤类型,并且任何嵌套级别均不能包含任何引⽤类型成员。

where T : new() 类型参数必须具有公共⽆参数构造函数。

where T : <基类名> 类型参数必须是指定的基类或派⽣⾃指定的基类。

where T : <接⼝名称> 类型参数必须是指定的接⼝或实现指定的接⼝。

where T : U 为 T 提供的类型参数必须是为 U 提供的参数或派⽣⾃为 U 提供的参数。

某些约束是互斥的。 所有值类型必须具有可访问的⽆参数构造函数。 struct 约束包含 new() 约束,且 new() 约束不能与 struct 约束结合使

⽤。 unmanaged 约束包含 struct 约束。 unmanaged 约束不能与 struct 或 new() 约束结合使⽤。

C#中泛型约束(where)是什么?

T约定:只能是Access类型或者Access的⼦类型

public class BaseAccess where T : Access

{

}

T约定:T只能传⼊接⼝的本⾝和实现了此接⼝的类

public class BaseAccess where T : IAggregateRoot

{

}

引⽤类型约束演⽰public class BaseAccess where T : class

{

}

值类型约束演⽰public class BaseAccess where T : struct

{

}

构造器约束public class BaseAccess where T : new()

{MongoContextAdapter _context;

public BaseAccess(MongoContextAdapter context)

{

this._context = context;

}

}

⼀个类型占位符有两个约束 必须是引⽤类型,必须提供构造函数public class BaseAccess where T : class,new()

{

}

K必须约定是⼀个引⽤类型

V必须约定是⼀个值类型

public class BaseAccess

where K : class,new()

where V : struct

{

}

/// 泛型参数K必须继承V K,V必须是引⽤类型,必须提供构造函数

public class BaseAccess

where K : V

where K : class,new()

where V : class,new()

{

}

但是class必须位于最前⾯,new()必须位于最后

可以⽤于类,⽅法,和委托,如:public class FutureResult where T:IQueryable { }

//可⽤于⽅法:public bool MyMethod(T t) where T : class { }

//可⽤于委托:

delegate T MyDelegate() where T : new()