C#泛型详解及关键字作用
泛型的介绍
C#泛型是一个高度灵活且强大的特性,能够让我们编写具有通用性的代码。在不加使用泛型的情况下,我们需要对不同类型的数据写出不同的代码。而使用了泛型之后,我们可以编写出更加通用的代码,同时减少了代码的重复,增强了代码的可重用性。
泛型类别通常用于集合类库,因为集合类库只处理与它们分别正在处理的元素类型无关的逻辑。
泛型的语法
在C#中,声明一个泛型的类别或方法,需要添加泛型参数。泛型参数可以是任何类型,例如基元类型,用户自定义类型等。在定义泛型类别或方法时,用“< >”括起来,泛型参数放在这对括号中。下面是一个示例:
class MyClass<T>
{
T myVar;
public MyClass(T x)
{
myVar = x;
}
public T getVar()
{
return myVar;
}
}
在这个示例中,我们定义了一个泛型类别 MyClass,该类别具有泛型参数 T。然后,我们在类中声明了一个私有变量 myVar 和一个公共方法 getVar(),该方法返回泛型类型 T 的变量。注意,类中的所有操作都使用泛型参数 T,这意味着我们可以将 MyClass 实例化为不同类型的对象。
泛型关键字
以下是C#中用于泛型的一些常用关键字:
- where 关键字:它可用于指定泛型类型参数必须满足的要求。常见的要求是类型参数必须是派生自某个类或实现某个接口。
- class 关键字:定义泛型类型参数的类型必须是引用类型。
- struct 关键字:定义泛型类型参数的类型必须是值类型。
- new() 关键字:限制类型参数必须有一个 public、无参数的构造函数。
泛型的示例
泛型类别示例
下面的示例实例化了上述的 MyClass 类。
class Program
{
static void Main(string[] args)
{
MyClass<int> mc1 = new MyClass<int>(10);
MyClass<string> mc2 = new MyClass<string>("Testing");
Console.WriteLine(mc1.getVar());
Console.WriteLine(mc2.getVar());
}
}
这个示例创建了两个 MyClass 实例:一个是整数类型,另一个是字符串类型。
泛型方法示例
下面的示例定义了一个泛型方法,用于传递两个不同类型的参数,并返回它们的最大值。
class Program
{
static void Main(string[] args)
{
Console.WriteLine(Maximum(3, 4));
Console.WriteLine(Maximum("hello", "world"));
}
public static T Maximum<T>(T x, T y) where T : IComparable<T>
{
if (x.CompareTo(y) > 0)
return x;
else
return y;
}
}
在这个示例中,我们定义了一个名为 Maximum 的泛型方法,用于接收两个参数并返回它们的最大值。使用了 where 关键字来指定 T 必须实现 IComparable 接口,这样我们就可以使用 CompareTo() 方法来比较它们的大小。同时,可以看到同一个方法被用来比较整数和字符串类型,这就是泛型提供的灵活性。
总结
C#泛型为我们提供了编写具有通用性和可重用性的代码的能力,使得我们可以更加有效地保持代码简洁,同时增强了代码的可读性。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C#泛型详解及关键字作用 - Python技术站