C#继承(五)——is和as运算符

    在结束接口和类的继承之前,需要介绍两个与继承有关的重要运算符:is和as。

如前所述,可以把具体类型的对象直接分配给基类或接口——如果这些类型在层次结构中有直接关系。例如,前面创建的SaverAccount可以直接分配给IBankAccount,因为SaverAccount类型实现了IBankAccount接口:

IBankAccount venusAccount=new SaverAccount();

    如果一个方法接受一个对象类型,现在希望访问IBankAccount成员,该怎么办?该对象类型没有IBankAccount接口的成员。此时可以进行类型转换。把对象(也可以使用任何接口中任意类型的参数,把它转换为需要的类型)转换为IBankAccount,再处理它:

public void WorkWithManyDifferentObjects( object o)

{

IBankAccount account = (IBankAccount) o;

// work with the account

}

    只要总是给这个方法提供一个IBankAccount类型的对象,这就是有效的。当然,如果接受一个object类型的对象,有时就会传递无效的对象。此时会得到InvalidCastException异常。在正常情况下接受异常从来都不好。此时应使用is和as运算符。

    不是直接进行类型转换,而应检查参数是否实现了接口IBankAccount。as运算符的工作原理类似于类层次结构中的cast运算符——它返回对象的引用。然而,它从不抛出InvalidCastException异常。相反,如果对象不是所要求的类型,这个运算符就返回null。这里,最好在使用引用前验证它是否为空,否则以后使用以下引用,就会抛出NullReferenceException异常:

public void WorkWithManyDifferentObjects( object o)

{

IBankAccount account = o as IBankAccount;

if (account ! = null)

{

//work with the account

}

}

    除了使用as运算符之外,还可以使用is运算符。is运算符根据条件是否满足,对象是否使用指定的类型,返回true或false。验证条件是true后,可以进行类型转换,因为现在,类型转换总会成功:

public void WorkWithManyDifferentObjects( object o)

{

if (o is IBankAccount)

{

IBankAccount account = (IBankAccount) o;

// work with the account

}

}

    在类层次结构内部的类型转换,不会抛出基于类型转换的异常,且使用is和as运算符都是可行的。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

掌控自身命运

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值