请问在C#里面,委托是否可以用多态
就是说,如果B,C是A的派生类,A有个纯虚拟方法f
B和C都重写了f,现在定义一个委托w,其形式是f,
再各定义一个B和C的对象b1,c1
定义一个A的引用a1
a1=b1;//将a1指向b1
再将a1.f加到w上
现在用调用w,那w是否会自动调用b1的f方法
根据微软的文档说明是这样的:
<对于实例方法,委托对象同时封装一个实例和该实例上的一个方法。如果您有一个委托对象和一组适当的参数,则可以用这些参数调用该委托。>
如果是这样的话,那应该是可以的,但不知道在委托封装的时候是否会截取掉派生类特有的东西,所以请高手回答一下

解决方案 »

  1.   

    w会调用b1的f方法。因为委托在创建的时候,会将方法所属的对象保存下来。也就是a1,而a1和b1实际上不过是一个对象的两个引用,所以,会调用类B的f方法(应该这样说)。实际上并不是委托多态了,而是委托会保存这个对象,这个对象多态了。上面罗嗦了一大堆,只是说明原理,像这种问题,你应该自己先尝试一下,然后再大胆的做出推测,最后上这里来提问,这样会更好。