C# 泛型概念的初步理解

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

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

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

C# 泛型代码块

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

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

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

Stack stack = new Stack(); 
  • 1.

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

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

public class Stack  
{  
   readonly int m_Size;   
   int m_StackPointer = 0;  
   T[] m_Items;  
   public Stack():this(100)  
   {}  
   public Stack(int size)  
   {  
      m_Size = size;  
      m_Items = new T[m_Size];  
   }  
   public void Push(T item)  
   {  
      if(m_StackPointer ﹥= m_Size)   
         throw new StackOverflowException();  
      m_Items[m_StackPointer] = item;  
      m_StackPointer++;  
   }  
   public T Pop()  
   {  
      m_StackPointer--;  
      if(m_StackPointer ﹥= 0)  
      {  
         return m_Items[m_StackPointer];  
      }  
      else 
      {  
         m_StackPointer = 0;  
         throw new InvalidOperationException(  
           "Cannot pop an empty stack");  
      }  
   }  

  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.

注 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-06-24 10:25:25

C#泛型

2009-08-24 14:43:35

C# 泛型

2009-08-26 09:36:03

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:27:05

C#泛型应用

2009-08-24 16:39:19

C# 泛型应用

2009-08-24 17:58:19

C# 泛型集合

2009-08-24 18:22:05

C# 泛型编程
点赞
收藏

51CTO技术栈公众号