0Pricing
C# Academy · 课时

C# 中的泛型

了解泛型如何实现类型安全且可复用的代码结构

C# 中的泛型 是 CoddyKit 上的免费 C# Academy 课时。 这是第 1 节课,共 5 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 C# Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 C# Academy 课程共包含 5 节课。

泛型简介

C# 中的泛型

欢迎来到“高级 C# 功能”的第一课!在本课中,您将学习泛型。泛型是 C# 中的一项强大功能,可用于创建灵活且可复用的代码。让我们开始吧!

C# 中的泛型 — 插图 1

什么是泛型?

什么是泛型?

泛型是 C# 中的一项功能,允许您定义类、方法和数据结构,并使用占位符表示它们存储或使用的数据类型。泛型可以确保类型安全并实现代码复用。

示例:泛型列表(List<T>)可以存储任意类型的元素,同时确保类型安全。

创建泛型类

创建泛型类

您可以使用<T>语法定义泛型类,其中T表示类型参数。示例:

要点:使用泛型可以创建适用于任何数据类型的类,同时保持类型安全。

using System;

class GenericBox<T> {
    public T Value { get; set; }

    public void Display() {
        Console.WriteLine("Value: " + Value);
    }
}

class Program {
    static void Main() {
        GenericBox<int> intBox = new GenericBox<int> { Value = 42 };
        intBox.Display(); // Outputs: Value: 42

        GenericBox<string> stringBox = new GenericBox<string> { Value = "Hello, Generics!" };
        stringBox.Display(); // Outputs: Value: Hello, Generics!
    }
}

创建泛型方法

创建泛型方法

您可以在类中定义泛型方法。示例:

提示:对于适用于多种数据类型的操作,请使用泛型方法。

using System;

class Program {
    static void Main() {
        PrintValue(42);
        PrintValue("Generics are powerful!");
    }

    static void PrintValue<T>(T value) {
        Console.WriteLine("Value: " + value);
    }
}

泛型约束

泛型约束

约束会限制可用作类型参数的类型。示例:

  • where T : struct - T 必须是值类型。
  • where T : class - T 必须是引用类型。
  • where T : new() - T 必须具有无参数构造函数。

示例:

要点:约束使泛型更加灵活,并适用于特定场景。

using System;

class Program {
    static void Main() {
        DisplayDefault<int>();
        DisplayDefault<string>();
    }

    static void DisplayDefault<T>() where T : new() {
        T instance = new T();
        Console.WriteLine("Created instance of: " + typeof(T));
    }
}

泛型集合

泛型集合

C# 提供了多个内置泛型集合:

  • List<T>:在动态数组中存储元素集合。
  • Dictionary<TKey, TValue>:存储键值对,以便快速查找。
  • Queue<T>:实现先进先出(FIFO)结构。

示例:使用泛型列表:

using System;
using System.Collections.Generic;

class Program {
    static void Main() {
        List<string> names = new List<string> { "Alice", "Bob", "Charlie" };
        names.Add("Diana");

        foreach (string name in names) {
            Console.WriteLine(name);
        }
    }
}

练习挑战

练习挑战

创建一个泛型类Pair<TKey, TValue>,用于存储一个键值对,并创建一个交换键和值的泛型方法Swap()。示例:

using System;

class Pair<TKey, TValue> {
    public TKey Key { get; set; }
    public TValue Value { get; set; }

    public void Swap() {
        (Key, Value) = ((TKey)(object)Value, (TValue)(object)Key);
    }

    public void Display() {
        Console.WriteLine($"Key: {Key}, Value: {Value}");
    }
}

class Program {
    static void Main() {
        Pair<string, int> pair = new Pair<string, int> { Key = "Age", Value = 30 };
        pair.Display();
        pair.Swap();
        pair.Display();
    }
}

使用泛型的最佳实践

使用泛型的最佳实践

以下是一些最佳实践:

  • 使用泛型创建可复用且类型安全的类和方法。
  • 需要特定类型要求时应用约束。
  • 为了性能和安全性,优先使用泛型集合,而不是非泛型集合。

提示:使用有意义的类型参数名称,例如用T表示类型,或用TKey和TValue表示键值对。

做得很好!

做得很好!

恭喜您!您已经学会了如何使用泛型在 C# 中创建可重用且灵活的代码。在下一课中,我们将使用 async 和 await 探索异步编程。让我们继续编写代码吧!

C# 中的泛型 — 插图 10

常见问题解答

「C# 中的泛型」课时是免费的吗?

是的 — 「C# 中的泛型」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 C# Academy 课程的其余内容,请升级到 CoddyKit PRO。 C# Academy 课程共包含 5 节课。

「C# 中的泛型」这节课中我会学到什么?

了解泛型如何实现类型安全且可复用的代码结构 你通过在浏览器中直接运行的动手代码来练习 C# Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 C# Academy 需要有经验吗?

无需任何先前经验。CoddyKit 上的 C# Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 1 节课,共 5 节。

「C# 中的泛型」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 C# Academy 课中编写并运行代码吗?

能。每节 C# Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. C# 中的泛型
  2. Async 和 Await:使用异步代码
  3. 理解线程和任务
  4. 探索委托和 Lambda
  5. 理解 C# 中的反射
← 返回 C# Academy