var eagle = new Eagle();
(eagle as IBird).Fly();
(eagle as IFlyable).Fly();
这里和 (IFlyable)eagle.Fly();有什么区别:
区别主要在于异常处理和安全性:
- 强制转换方式可能会导致运行时异常,因此在使用前最好确保对象确实实现了相应的接口,否则会抛出
InvalidCastException
。 - as 运算符提供了更安全的方式,即使转换失败也不会引发异常。你可以在之后的代码中检查结果是否为
null
,以确定是否成功转换。