下面我来详细讲解一下 C# 泛型的相关知识。
什么是泛型
泛型是 C# 语言的一个重要特性,它能使你编写出更加灵活和可重用的代码。泛型和类、接口、委托和方法一样,是 C# 中的一种类型。它允许你定义一种类型,这种类型可以在使用时指定其具体的类型参数。这相当于抽象出了一种通用的类型,只有在具体使用时才会确定其具体类型。
泛型的优势
-
安全性:泛型能提供编译时类型检查,避免将错误的类型对象放入集合中,从而使代码更加安全健壮。
-
可重用性:泛型能够实现代码的重用性。如 List
类可以保存任何类型的元素,因此,可以很容易地重用这个类来创建包含任何类型元素的列表。 -
集成性:泛型能够很好地与其他 C# 特性集成。例如,泛型类可以继承一个非泛型类,反之亦然。
泛型的基本用法
常用的泛型类型包括:List
泛型集合
泛型集合是泛型的一个常用场景。C# 集合类(如 ArrayList、HashTable)在使用期间需要进行强制类型转换,而泛型集合类则不需要。List
List<string> list = new List<string>();
list.Add("apple");
list.Add("banana");
list.Add("cherry");
foreach (string fruit in list)
{
Console.WriteLine(fruit);
}
泛型方法
通过泛型方法,我们可以在编写代码时指定泛型类型参数,而不是在运行时才指定。以下是一个示例:
static void Swap<T>(ref T lhs, ref T rhs)
{
T temp;
temp = lhs;
lhs = rhs;
rhs = temp;
}
// 调用泛型方法
int a = 1, b = 2;
Swap<int>(ref a, ref b);
泛型约束
泛型约束指定了泛型类型参数必须满足的条件。如果某个类型不满足指定的约束条件,该类型就不能作为泛型类型参数来使用。以下是一些经常用到的泛型约束:
- where T : class:T 必须是引用类型(字符串、数组、委托、接口、类都是引用类型)。
- where T : struct:T 必须是值类型(整型、浮点型、布尔型、结构体都是值类型)。
- where T : new():T 必须有一个无参数的公共构造函数。
- where T : 基类名:T 必须继承自指定的基类。
- where T : 接口名:T 必须实现指定的接口。
以下是一个示例:
class MyClass<T> where T : class
{
T myVar;
public MyClass(T value)
{
myVar = value;
}
public void Show()
{
Console.WriteLine(myVar.ToString());
}
}
// 调用泛型类
MyClass<string> myClass = new MyClass<string>("hello");
myClass.Show();
泛型继承
泛型类也可以继承其他非泛型类或泛型类。以下是一个示例:
class BaseClass
{
public void Foo()
{
Console.WriteLine("base");
}
}
class DerivedClass<T> : BaseClass
{
public void Bar(T value)
{
Console.WriteLine(value.ToString());
}
}
// 调用泛型类
DerivedClass<string> derivedClass = new DerivedClass<string>();
derivedClass.Foo();
derivedClass.Bar("hello");
以上就是我对 C# 泛型的简单理解分享,希望对你有所帮助。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C# 泛型的简单理解(安全、集合、方法、约束、继承)分享 - Python技术站