C# 泛型概念的初步理解

开发 后端
什么是C# 泛型呢?对于C# 泛型的理解是什么呢?那么本文就向你介绍C# 泛型的概念以及实例的理解,希望对你理解和学习C# 泛型有所帮助。

C# 泛型是一种类型占位符,或称之为类型参数。我们知道在一个方法中,一个变量的值可以作为参数,但其实这个变量的类型本身也可以作为参数。泛型允许我们在调用的时候再指定这个类型参数是什么。在.net中,泛型能够给我们带来的两个明显好处是——类型安全和减少装箱、拆箱。通过泛型可以定义类型安全类,而不会损害类型安全、性能或工作效率。您只须一次性地将服务器实现为一般服务器,同时可以用任何类型来声明和使用它。为此,需要使用 ﹤ 和 ﹥ 括号,以便将一般类型参数括起来。例如,可以按如下方式定义和使用一般堆栈:

  1. public class Stack  
  2. {  
  3.    T[] m_Items;   
  4.    public void Push(T item)  
  5.    {...}  
  6.    public T Pop()  
  7.    {...}  
  8. }  
  9. Stack stack = new Stack();  
  10. stack.Push(1);  
  11. stack.Push(2);  
  12. int number = stack.Pop(); 

C# 泛型代码块

显示一般堆栈的完整实现。将代码块 1 与代码块 2 进行比较,您会看到,好像 代码块 1 中每个使用 Object 的地方在代码块 2 中都被替换成了 T,除了使用一般类型参数 T 定义 Stack 以外:

  1. public class Stack  
  2. {...} 

在使用一般堆栈时,必须通知编译器使用哪个类型来代替一般类型参数 T(无论是在声明变量时,还是在实例化变量时):

  1. Stack stack = new Stack(); 

编译器和运行库负责完成其余工作。所有接受或返回 T 的方法(或属性)都将改为使用指定的类型(在上述示例中为整型)。

C# 泛型代码块之一般堆栈

  1. public class Stack  
  2. {  
  3.    readonly int m_Size;   
  4.    int m_StackPointer = 0;  
  5.    T[] m_Items;  
  6.    public Stack():this(100)  
  7.    {}  
  8.    public Stack(int size)  
  9.    {  
  10.       m_Size = size;  
  11.       m_Items = new T[m_Size];  
  12.    }  
  13.    public void Push(T item)  
  14.    {  
  15.       if(m_StackPointer ﹥= m_Size)   
  16.          throw new StackOverflowException();  
  17.       m_Items[m_StackPointer] = item;  
  18.       m_StackPointer++;  
  19.    }  
  20.    public T Pop()  
  21.    {  
  22.       m_StackPointer--;  
  23.       if(m_StackPointer ﹥= 0)  
  24.       {  
  25.          return m_Items[m_StackPointer];  
  26.       }  
  27.       else 
  28.       {  
  29.          m_StackPointer = 0;  
  30.          throw new InvalidOperationException(  
  31.            "Cannot pop an empty stack");  
  32.       }  
  33.    }  

注 T 是一般类型参数(或类型参数),而一般类型为 Stack。Stack 中的 int 为类型实参。

该编程模型的优点在于,内部算法和数据操作保持不变,而实际数据类型可以基于客户端使用服务器代码的方式进行更改。

C# 泛型的基本概念就向你介绍到这里,希望对你了解和学习C# 泛型有所帮助。

【编辑推荐】

  1. ASP.NET异步回调浅析
  2. C#网络编程入门基础知识浅析
  3. C#网络编程服务器端程序设计浅析
  4. C#网络编程客户端程序设计浅析
  5. 浅析C# 泛型处理的问题空间
责任编辑:仲衡 来源: MSDN
相关推荐

2009-08-24 14:26:42

C# 泛型类

2009-08-24 15:28:19

C# 泛型方法

2009-08-24 17:39:21

C# 泛型集合

2009-08-24 10:37:27

C# 泛型

2009-08-26 09:36:03

C#泛型

2009-06-24 10:25:25

C#泛型

2009-08-24 14:43:35

C# 泛型

2009-09-01 16:14:11

C#泛型

2013-03-20 09:27:33

C#泛型

2009-09-02 17:38:16

C#泛型支持

2009-08-24 18:15:24

C# Dictiona

2009-08-24 15:12:13

C# 泛型接口

2009-08-24 14:51:25

C# 泛型泛型类型

2009-08-24 15:38:21

C# 泛型数组

2009-08-24 14:20:13

C# 强制类型转换

2009-08-24 10:07:57

C#泛型处理

2009-08-24 17:58:19

C# 泛型集合

2009-08-24 17:27:05

C#泛型应用

2009-08-24 16:39:19

C# 泛型应用

2009-08-24 15:50:23

C# 泛型C# 泛型委托
点赞
收藏

51CTO技术栈公众号