C#语法之泛型的多种应用
简介
C#中泛型是一种强类型约束,可以用于定义类、接口、方法等,泛型在.NET框架的类型安全性方面扮演着重要的角色。泛型的定义方式为在类型或方法定义时用尖括号包含泛型参数。例如:
// 定义泛型类
class ExampleClass<T>
{
private T exampleField;
public ExampleClass(T exampleParameter)
{
exampleField = exampleParameter;
}
public T ExampleMethod(T exampleParameter)
{
return exampleField = exampleParameter;
}
}
// 定义泛型方法
public T GenericMethod<T>(T a, T b)
{
// ...
}
泛型类
泛型类可以适用于成员、方法等多种场合中泛化兼容的类型,也可以支持多个不同类型参数。
以下是泛型类的示例代码:
public class Stack<T>
{
private T[] items;
private int top;
public Stack()
{
items = new T[100];
top = -1;
}
public void Push(T item)
{
if (top == items.Length - 1)
{
throw new Exception("Stack overflow");
}
items[++top] = item;
}
public T Pop()
{
if (top == -1)
{
throw new Exception("Stack underflow");
}
return items[top--];
}
}
以上是一个栈(Stack)的泛型类示例,Stack类是一个通用类,它可以适用于任何类型的元素。
泛型方法
泛型方法可以在方法定义的时候定义类型参数。类型参数可以用于参数类型、返回类型以及方法内部的变量类型。
以下是泛型方法的示例代码:
public static void Swap<T>(ref T a, ref T b)
{
T temp = a;
a = b;
b = temp;
}
以上是一个交换两个变量值的泛型方法,此方法可以同时适用于整型、浮点型、字符串等类型。
示例1
以下示例代码演示了如何使用泛型实现一个通用的比较方法,该方法可以比较任意两个类型的元素,并返回它们之间的关系。在此示例中,我们使用Compare方法来比较两个字符串的长度,然后根据比较结果输出相应的结果。
public static int Compare<T>(T a, T b) where T : IComparable
{
return a.CompareTo(b);
}
static void Main(string[] args)
{
string str1 = "123456";
string str2 = "12345";
if (Compare(str1, str2) > 0)
{
Console.WriteLine("str1 is longer than str2");
}
else
{
Console.WriteLine("str2 is longer than or equal to str1");
}
}
示例2
以下示例代码演示了如何使用泛型实现一个通用的排序方法,该方法可以排序任意类型的元素。在此示例中,我们使用SelectionSort方法来对整型数组进行排序。
public static void SelectionSort<T>(T[] arr) where T : IComparable<T>
{
for (int i = 0; i < arr.Length - 1; ++i)
{
int minIndex = i;
for (int j = i + 1; j < arr.Length; ++j)
{
if (arr[j].CompareTo(arr[minIndex]) < 0)
{
minIndex = j;
}
}
T temp = arr[minIndex];
arr[minIndex] = arr[i];
arr[i] = temp;
}
}
static void Main(string[] args)
{
int[] arr = { 3, 2, 1, 5, 4 };
SelectionSort(arr);
for (int i = 0; i < arr.Length; ++i)
{
Console.Write(arr[i] + " ");
}
}
以上是一个选择排序(Selection Sort)的泛型方法示例,该方法适用于任何实现了IComparable接口的类型。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C#语法之泛型的多种应用 - Python技术站