1.4.4.2 as 和 is 操作符

前一章,我们讨论了如何定义一个接口,并有多个类去实现它。

那么我们要明白实现接口的类可以直接赋值给接口对象。

IBankAccount venusAccount = new SaverAccount();

那么这时候我们就会碰到一个问题,在我们定义一个方法的时候传入的是Object类型,而不是实现接口的类型,那我们如何将这个类赋值给接口类型呢?

        public static  void WorkWithManyDifferentObjects(object o)
        {
            IBankAccount account = (IBankAccount)o;
            account.ToString();
            
        }

我们使用了强制类型转换将Object类型转换为接口类型。

那么问题来了,如果我们传入的对象并没有实现该接口,那么再强制类型转换的过程中就会报错。

        static void Main(string[] args)
        {
            SaverCount saverCount = new SaverCount();//实现了接口
            WorkWithManyDifferentObjects(saverCount);
            GoldAccount goldAccount = new GoldAccount();//没有实现接口
            WorkWithManyDifferentObjects(goldAccount);
        }

这是我们需要使用 as 操作符用来判断是否能将该Object类型转换为接口类型。

 IBankAccount account =  o  as IBankAccount;

如果不能转换那么就会将null赋值给account 。

        public static  void WorkWithManyDifferentObjects(object o)
        {
            IBankAccount account =  o  as IBankAccount;
            if (account!=null)
            {
                account.ToString();

            }

        }

然后再判断是否为空进行操作。

如果使用is操作符那么将省略判断的过程

 public static  void WorkWithManyDifferentObjects(object o)
        {
            if (o is IBankAccount bankAccount)
            {
                bankAccount.ToString();
            }
        }

如果O能转换为接口类型,那么就会将转换后的赋值给后边的变量bankAccount,并返回true,否者返回false

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值