当前位置:首页 > 技能相关 > C#与C++ > 正文内容

c#高级编程 is和as运算符

admin2年前 (2023-01-30)C#与C++2420 修订时间:2023-01-30 10:59:00

本文介绍两个与继承有关的重要运算符: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运算符。

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运算符都是可行的。

 您阅读本篇文章共花了: 

免责声明
本站内容均为博客主本人日常使用记录的存档,如侵犯你的权益请联系:lifei@zaiheze.com 546262132@qq.com 沟通删除事宜。本站仅带访问端口形式使用,已杜绝搜索引擎爬取。

扫描二维码推送至手机访问。

版权声明:本文由LIFEI - blog发布,如需转载请注明出处。

本文链接:http://www.lifeiai.com/?id=288

分享给朋友:

相关文章

Web API的创建3年前 (2022-11-07)
C# 第四篇 数组定义3年前 (2022-11-15)
C# 第五篇 字符串3年前 (2022-11-15)

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。