与继承有关的运算符

  1. public void WorkWithManyDifferentObjects(object o)
  2. {
  3. IBankAccount account = (IBankAccount)o;
  4. // work with the account
  5. }

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

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

is

使用is运算符。is运算符根据条件是否满足,对象是否使用指定的类型,返回true或false。
验证条件是true后,可以进行类型转换。

  1. public void WorkWithManyDifferentObjects(object o)
  2. {
  3. if (o is IBankAccount)
  4. {
  5. IBankAccount account = (IBankAccount)o;
  6. // work with the account
  7. }
  8. }

as

as运算符的工作原理类似于类层次结构中的cast运算符——它返回对象的引用。

它从不抛出InvalidCastException异常。相反,如果对象不是所要求的类型,这个运算符就返回null。

  1. public void WorkWithManyDifferentObjects(object o)
  2. {
  3. IBankAccount account = o as IBankAccount;
  4. if (account ! = null)
  5. {
  6. // work with the account
  7. }
  8. }