正在阅读:C# 最强大的功能--泛型简介C# 最强大的功能--泛型简介

2005-06-23 10:16 出处: 作者:Juval Lowy 责任编辑:moningfeng

但是,您无法为类级别一般类型参数提供方法级别约束。类级别一般类型参数的所有约束都必须在类作用范围中定义。

在重写定义了一般类型参数的虚拟方法时,子类方法必须重新定义该方法特定的一般类型参数:

public class BaseClass
{
public virtual void SomeMethod(T t)
{...}
}
public class SubClass : BaseClass
{
public override void SomeMethod(T t)
{...}
}



子类实现必须重复在基础方法级别出现的所有约束:

public class BaseClass
{
public virtual void SomeMethod(T t) where T : new()
{...}
}
public class SubClass : BaseClass
{
public override void SomeMethod(T t) where T : new()
{...}
}



请注意,方法重写不能定义没有在基础方法中出现的新约束。

此外,如果子类方法调用虚拟方法的基类实现,则它必须指定要代替一般基础方法类型参数使用的类型实参。您可以自己显式指定它,或者依靠类型推理(如果可用):

public class BaseClass
{
public virtual void SomeMethod(T t)
{...}
}
public class SubClass : BaseClass
{
public override void SomeMethod(T t)
{
base.SomeMethod(t);
base.SomeMethod(t);
}
}



一般静态方法

C# 允许定义使用一般类型参数的静态方法。但是,在调用这样的静态方法时,您需要在调用场所为包含类提供具体的类型,如下面的示例所示:

public class MyClass
{

public static T SomeMethod(T t)

{...}
}
int number = MyClass.SomeMethod(3);



静态方法可以定义方法特定的一般类型参数和约束,就像实例方法一样。在调用这样的方法时,您需要在调用场所提供方法特定的类型 — 可以按如下方式显式提供:

public class MyClass
{
public static T SomeMethod(T t,X x)
{..}
}
int number = MyClass.SomeMethod(3,"AAA");



或者依靠类型推理(如果可能):

int number = MyClass.SomeMethod(3,"AAA");


键盘也能翻页,试试“← →”键

关注我们

最新资讯离线随时看 聊天吐槽赢奖品