详细介绍C#泛型
什么是泛型?
泛型是C#语言中的一种数据类型,它允许我们写出能够适用于多种数据类型的代码。泛型作用于类、接口、方法等,可以大大提高代码的复用性和可读性。
泛型的语法与用法
泛型类
泛型类可以适用于多种数据类型,我们可以通过类名后加尖括号传入数据类型,例如:
public class MyList<T>
{
private T[] data;
public MyList(int length)
{
data = new T[length];
}
public void Add(T element)
{
// 添加元素
}
// 其他方法
}
// 使用示例:
MyList<int> intList = new MyList<int>(10);
intList.Add(1);
intList.Add(2);
MyList<string> stringList = new MyList<string>(5);
stringList.Add("Hello");
stringList.Add("World");
上面的代码定义了一个MyList<T>
泛型类,可以用来存储任意数据类型的列表,并提供了添加元素的功能。我们可以通过实例化MyList<T>
类时,传入具体的类型参数,例如MyList<int>
和MyList<string>
。
泛型接口
泛型接口与泛型类类似,可以适用于多种数据类型,例如:
public interface IMyList<T>
{
void Add(T element);
// 其他方法
}
public class MyIntList : IMyList<int>
{
private int[] data;
public MyIntList(int length)
{
data = new int[length];
}
public void Add(int element)
{
// 添加元素
}
// 实现其他方法
}
// 使用示例:
MyIntList intList = new MyIntList(10);
intList.Add(1);
intList.Add(2);
上面的代码定义了一个IMyList<T>
泛型接口,提供了添加元素的方法。然后我们定义了一个MyIntList
类,实现了IMyList<int>
泛型接口,可以用来存储整型数据。
泛型方法
除了泛型类和泛型接口,C#还允许我们定义泛型方法。泛型方法中的泛型参数不在类或接口的范围内,而是作用于方法中。例如:
public class MyMath
{
public static T Max<T>(T a, T b) where T : IComparable
{
return a.CompareTo(b) > 0 ? a : b;
}
}
// 使用示例:
int maxInt = MyMath.Max(1, 2);
double maxDouble = MyMath.Max(1.0, 2.0);
上面的代码定义了一个Max<T>
泛型方法,可以用于比较任意可以进行比较的数据类型并返回其中的最大值。
示例
示例1:泛型类
下面是一个示例,定义了一个Pair<T>
泛型类,可以用来存储两个数据类型相同的数据:
public class Pair<T>
{
public T First { get; set; }
public T Second { get; set; }
}
// 使用示例:
Pair<int> intPair = new Pair<int> { First = 1, Second = 2 };
Pair<string> stringPair = new Pair<string> { First = "Hello", Second = "World" };
上面的示例中,我们定义了一个Pair<T>
泛型类,其中的两个属性First
和Second
是相同的数据类型T
。然后我们通过类名后加尖括号的方式传入具体的类型参数,例如Pair<int>
和Pair<string>
。
示例2:泛型方法
下面是一个示例,定义了一个ReversePrint<T>
泛型方法,可以用来倒序打印任意类型的数组:
public class MyArray
{
public static void ReversePrint<T>(T[] array)
{
for (int i = array.Length - 1; i >= 0; i--)
{
Console.Write(array[i] + " ");
}
Console.WriteLine();
}
}
// 使用示例:
int[] intArray = { 1, 2, 3, 4, 5 };
string[] stringArray = { "Hello", "World", "!" };
MyArray.ReversePrint(intArray); // 输出:5 4 3 2 1
MyArray.ReversePrint(stringArray); // 输出:! World Hello
上面的示例中,我们定义了一个ReversePrint<T>
泛型方法,可以用来倒序打印任意类型的数组。我们可以通过传入不同的类型的数组,调用ReversePrint<T>
方法得到相应的结果。
结论
通过上述的介绍,我们了解了C#泛型的语法、用法和示例,并且知道了泛型可以大大提高代码的复用性和可读性。在编写C#代码时,我们可以充分发挥泛型的优势,提高代码的质量和可维护性。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:详细介绍C# 泛型 - Python技术站