C# 如何使用泛型方法和泛型类_C# 泛型方法与泛型类使用教程

小老鼠
发布: 2025-11-02 06:17:25
原创
104人浏览过
泛型方法和泛型类可提升代码复用与类型安全,如定义PrintValue(T value)自动推断类型,Swap实现值交换,SimpleStack支持多类型栈操作,通过where约束限定类型条件,Pair类关联不同数据类型,避免装箱拆箱,增强性能。

c# 如何使用泛型方法和泛型类_c# 泛型方法与泛型类使用教程

泛型是 C# 中非常强大的特性,它允许我们编写可重用、类型安全的代码。通过使用泛型方法和泛型类,可以在不指定具体类型的情况下定义算法或数据结构,从而提高代码的灵活性和性能。本文将介绍如何在 C# 中使用泛型方法与泛型类,并提供实用示例。

泛型方法的使用

泛型方法是指在其定义中包含类型参数的方法。类型参数用尖括号 T 表示,运行时由实际传入的类型自动推断。

定义一个简单的泛型方法:

public static void PrintValue(T value)
{
   Console.WriteLine($"Value: {value}, Type: {typeof(T)}");
}

调用该方法时无需显式指定类型,编译器会根据传入参数自动推断:

PrintValue(100); // 输出: Value: 100, Type: System.Int32
PrintValue("Hello"); // 输出: Value: Hello, Type: System.String

也可以手动指定类型:

PrintValue(42);

泛型方法常用于工具类中,例如交换两个变量的值:

public static void Swap(ref T a, ref T b)
{
   T temp = a;
   a = b;
   b = temp;
}

调用方式:

int x = 10, y = 20;
Swap(ref x, ref y);
Console.WriteLine($"{x}, {y}"); // 输出: 20, 10

泛型类的定义与使用

泛型类允许类的操作针对多种类型保持一致。最常见的例子是集合类,如 ListDictionary 等。

自定义一个简单的泛型类:

public class SimpleStack
{
   private List items = new List();

   public void Push(T item)
   {
      items.Add(item);
   }

   public T Pop()
   {
      if (items.Count == 0)
         throw new InvalidOperationException("Stack is empty.");
      T item = items[items.Count - 1];
      items.RemoveAt(items.Count - 1);
      return item;
   }

   public int Count => items.Count;
}

使用这个泛型栈:

var stringStack = new SimpleStack();
stringStack.Push("First");
stringStack.Push("Second");
Console.WriteLine(stringStack.Pop()); // 输出: Second



无阶未来模型擂台/AI 应用平台
无阶未来模型擂台/AI 应用平台

无阶未来模型擂台/AI 应用平台,一站式模型+应用平台

无阶未来模型擂台/AI 应用平台35
查看详情 无阶未来模型擂台/AI 应用平台

var intStack = new SimpleStack();
intStack.Push(1);
intStack.Push(2);
Console.WriteLine(intStack.Pop()); // 输出: 2

泛型类的好处在于:一次定义,多类型复用,且避免了装箱拆箱带来的性能损耗。

约束泛型类型

有时我们需要对泛型参数做限制,比如要求它必须实现某个接口或具有无参构造函数。这时可以使用 泛型约束(where 关键字)。

常见约束包括:

  • where T : class —— 必须是引用类型
  • where T : struct —— 必须是值类型
  • where T : IComparable —— 必须实现指定接口
  • where T : new() —— 必须有无参构造函数
  • where T : MyBaseClass —— 必须继承自某个类

示例:只允许引用类型并具备无参构造函数:

public class ServiceFactory where T : class, new()
{
   public T CreateInstance()
   {
      return new T();
   }
}

这样就能确保 new T() 是合法操作。

多个泛型参数的使用

泛型支持多个类型参数,适用于键值对、映射等场景。

例如定义一个简单的键值容器:

public class Pair
{
   public TFirst First { get; set; }
   public TSecond Second { get; set; }

   public Pair(TFirst first, TSecond second)
   {
      First = first;
      Second = second;
   }
}

使用方式:

var pair = new Pair("Age", 25);
Console.WriteLine($"{pair.First}: {pair.Second}"); // 输出: Age: 25

这种设计在需要关联不同类型数据时非常有用。

基本上就这些。掌握泛型方法和泛型类的使用,能让你写出更高效、更安全的 C# 代码。关键是理解类型参数的作用以及如何通过约束控制可用操作。实际开发中多结合集合、工厂模式、服务注册等场景练习,自然就能熟练运用。

以上就是C# 如何使用泛型方法和泛型类_C# 泛型方法与泛型类使用教程的详细内容,更多请关注php中文网其它相关文章!

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号