接口是根据什么来选择实现类的?
----------------------------------
接口先于实现类而存在,它无法选择哪个类来实现它。
你的问题可能需要换个问法:“调用接口的方法时,怎么确定是调用了哪个实现类中的方法?”
我有的接口类有3个实现类A,B,C,但我调用时,只会调用C中有实现方法。
所以我想知道,接口是如何选择的,而不是A或B。
@北京金孔雀:
“调用接口的方法时,怎么确定是调用了哪个实现类中的方法?”
------------------------------------------------------------------
运行时环境会确定被接口引用的对象是哪个实现类的类型,这样调用接口中的方法时,运行时就知道了该调用哪个实现类中方法的代码。
这是OOP中所谓的多态性。
@北京金孔雀:
interface IFun
{
void F1();
}
class FunA : IFun
{
public void F1(){Console.Wirte("FunA.F1");}
}
class FunB : IFun
{
public void F1(){Console.Wirte("FunB.F1");}
}
public static void Main()
{
IFun obj = new FunA();//把这里换成new FunB();重新运行,你就明白了。
obj.F1();
}
实例确定的
接口ITest,方法 Add
实例 A/B/C
声明
ITest t1=new A()
ITest t2=new B()
ITest t3=new C()
调用
t1.Add() 调用 A实现
t2.Add() 调用 B实现
t3.Add() 调用 C实现
Interface A;
A a;
1.a.GetType()就得到了。
2.a = new 什么,就是什么。