前一章,我们讨论了如何定义一个接口,并有多个类去实现它。
那么我们要明白实现接口的类可以直接赋值给接口对象。
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