• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

实例讲解C# 泛型(Generic)

c# 搞代码 4年前 (2022-01-09) 31次浏览 已收录 0个评论

泛型(Generic) 允许您延迟编写类或方法中的编程元素的数据类型的规范,直到实际在程序中使用它的时候。换句话说,泛型允许您编写一个可以与任何数据类型一起工作的类或方法。

您可以通过数据类型的替代参数编写类或方法的规范。当编译器遇到类的构造函数或方法的函数调用时,它会生成代码来处理指定的数据类型。下面这个简单的实例将有助于您理解这个概念:

using System;
using System.Collections.Generic;

namespace GenericApplication
{
  public class MyGenericArray<T>
  {
    private T[] array;
    public MyGenericArray(int size)
    {
      array = new T[size + 1];
    }
    public T getItem(int index)
    {
      return array[index];
    }
    public void setItem(int index, T value)
    {
      array[index] = value;
    }
  }
      
  class Tester
  {
    static void Main(string[] args)
    {
      // 声明一个整型数组
      MyGenericArray<int> intArray = new MyGenericArray<int>(5);
      // 设置值
      for (int c = 0; c < 5; c++)
      {
        intArray.setItem(c, c*5);
      }
      // 获取值
      for (int c = 0; c < 5; c++)
      {
        Console.Write(intArray.getItem(c) + " ");
      }
      Console.WriteLine();
      // 声明一个字符数组
      MyGenericArray<char> charArray = new MyGenericArray<char>(5);
      // 设置值
      for (int c = 0; c < 5; c++)
      {
        charArray.setItem(c, (char)(c+97));
      }
      // 获取值
      for (int c = 0; c < 5; c++)
      {
        Console.Write(charArray.getItem(c) + " ");
      }
      Console.WriteLine();
      Console.ReadKey();
    }
  }
}

当上面的代码被编译和执行时,它会产生下列结果:

0 5 10 15 20
a b c d e

泛型(Generic)的特性

使用泛型是一种增强程序功能的技术,具体表现在以下几个方面:

  • 它有助于您最大限度地重用代码、保护类型的安全以及提高性能。
  • 您可以创建泛型集合类。.NET 框架类库在 System.Collections.Generic 命名空间中包含了一些新的泛型集合类。您可以使用这些泛型集合类来替代 System.Collections 中的集合类。
  • 您可以创建自己的泛型接口、泛型类、泛型方法、泛型事件和泛型委托。
  • 您可以对泛型类进行约束以访问特定数据类型的方法。
  • 关于泛型数据类型中使用的类型的信息可在运行时通过使用反射获取。

泛型(Generic)方法

在上面的实例中,我们已经使用了泛型类,我们可以通过类型参数声明泛型方法。下面的程序说明了这个概念:

using System;
using System.Collections.Generic;

namespace GenericMethodAppl
{
  class Program
  {
    static void Swap<T>(ref T lhs, ref T rhs)
    {
      T temp;
      temp = lhs;
      lhs = rhs;
      rhs = temp;
    }
    static void Main(string[] args)
    <div style="color:transparent">本文来源gaodai^.ma#com搞#代!码网</div>{
      int a, b;
      char c, d;
      a = 10;
      b = 20;
      c = 'I';
      d = 'V';

      // 在交换之前显示值
      Console.WriteLine("Int values before calling swap:");
      Console.WriteLine("a = {0}, b = {1}", a, b);
      Console.WriteLine("Char values before calling swap:");
      Console.WriteLine("c = {0}, d = {1}", c, d);

      // 调用 swap
      Swap<int>(ref a, ref b);
      Swap<char>(ref c, ref d);

      // 在交换之后显示值
      Console.WriteLine("Int values after calling swap:");
      Console.WriteLine("a = {0}, b = {1}", a, b);
      Console.WriteLine("Char values after calling swap:");
      Console.WriteLine("c = {0}, d = {1}", c, d);
      Console.ReadKey();
    }
  }
}

搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:实例讲解C# 泛型(Generic)
喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址