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

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

但是,您可以使用临时的 Object 变量,将一般类型参数强制转换到其他任何类型:

class SomeClass
{...}

class MyClass
{

void SomeMethod(T t)

{
object temp = t;
SomeClass obj = (SomeClass)temp;

}
}



不用说,这样的显式强制类型转换是危险的,因为如果为取代一般类型参数而使用的类型实参不是派生自您要显式强制转换到的类型,则可能在运行时引发异常。要想不冒引发强制类型转换异常的危险,一种更好的办法是使用 is 和 as 运算符,如代码块 6 所示。如果一般类型参数的类型是所查询的类型,则 is 运算符返回 true;如果这些类型兼容,则 as 将执行强制类型转换,否则将返回 null。您可以对一般类型参数以及带有特定类型实参的一般类使用 is 和 as。

代码块 6. 对一般类型参数使用“is”和“as”运算符

public class MyClass
{
public void SomeMethod(T t)
{
if(t is int)
{...}

if(t is LinkedList)
{...}

string str = t as string;
if(str != null)
{...}

LinkedList list = t as LinkedList;
if(list != null)
{...}
}
}




继承和泛型
在从一般基类派生时,必须提供类型实参,而不是该基类的一般类型参数:

public class BaseClass
{...}
public class SubClass : BaseClass
{...}



如果子类是一般的而非具体的类型实参,则可以使用子类一般类型参数作为一般基类的指定类型:

public class SubClass : BaseClass
{...}



在使用子类一般类型参数时,必须在子类级别重复在基类级别规定的任何约束。例如,派生约束:

public class BaseClass where T : ISomeInterface
{...}
public class SubClass : BaseClass where T : ISomeInterface
{...}


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

关注我们

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