C# is和as运算符

两个与继承有关的重要运算符 is 和 as

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 运算符。

as 运算符

对于参数不是直接进行类型转换,而应检查参数是否实现了接口 IBankAccount 。 as运算符的工作原理类似于类层次结构中的cast运算符,它返回对象的引用。然而,它从不抛出 InvalidCastException 异常。 相反,如果对象不是所要求的的类型, 这个运算符就会返回 null。 

看下面的例子, 最好在使用引用前验证它是否为空

public void WorkWithManyDifferentObjects(object o)
{
    IBankAccount account = o as IBankAccount;
    if(account != null)
    {
        // work with the account
    }
}

is 运算符

除了使用 as 运算符之外, 还可以使用 is 运算符。 is运算符根据条件是否满足, 对象是否使用指定的类型, 返回 true 或 false。 

public void WorkWithManyDifferentObjects(object o)
{
    if(o is IBankAccount)
    {
        IBankAccount account = o as IBankAccount;
        // work with the account
    }
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值