实现多个interface与令人费解的强制类型转换2011-10-19 博客园 dboy8454看下面的类关系图:

两个interface,它们之间唯一的关系是:拥有同一个子类。再看下面的代码:
class Test
{
public static void Main()
{
Test t = new Test();
t.testfun(new AB());//传入的对象(运行时类型)为AB,是IA的子类没有问题;
}
public void testfun(IA a) //编译时类型为IA;
{
IB b = a as IB; //令人费解之处
if(b!=null)
{
b.fun();
}
Console.Read();
}
}
interface IA
{
}
interface IB
{
void fun();
}
class AB : IA, IB
{
public void fun()
{
Console.WriteLine("AB.fun() called.");
otherOperation();
}
public void otherOperation()
{
Console.WriteLine("Commercial Operation.");
}
}