觉得在C#2.0中接口的变化主要为了防止当一个类实现多个接口时,有些接口成员不但名称相同而且签名也相同而惹起的麻烦(纯属推测,以下证明)。
如例,有两个接口:
IGui1
{
void Print();
}
IGui2
{
void Print()
}
在1.0中实现接口是这样的:
public class WindowGui:IGui1,IGui2
{
public void Print(){Console.Write("print...");}
}
问题出在此:IGui1和IGui2的Print方法名和签名都相同,如果当IGui1和IGui2的Print()的作用不相同时,那么在C#1.0中必须必修改代码(用Adapter模式??)
在C#2.0中实现接口有如下变化:
public class WindowGui:IGui1,IGui2
{
void IGui1.Print(){Console.Write("GUI1 print...");}
void IGui2.Print(){Console.Write("GUI2 print...");}
}
很明显,实现接口的时必须指明实现哪个接口的成员,无论是只实现一个接口还是多个接口,如:IGui1.Print()。但请注意:在C#1.0中实现方法时一定要在前边加上public,如上面public void Print(), 在C#2.0中是不能加public的。
调用接口的变化:
在C#1.0中有两种方式:
1:WindowGui gui = new WindowGui();gui.Print()。
2:IGui1 gui = new WindowGui(); gui.Print();
这证明我前面的推测,无论是哪种调用方式,当有接口的成员名和签名相同时,就不知道是这个方法是属于哪个接口的。
在C#2.0中:只能采取C#1.1中的第二个方法。
IGui1 gui1 = new WindowGui();
IGui2 gui2 = new WindowGui();
gui1.Print();
gui2.Print();
这个程序很清淅,因为已指明实现了哪个接口的成员。注意:在C#2.0中不能再像C#1.0那样中可以通过对象调用接口成员
WindowGui gui = new WindowGui();
gui.Print();
很简单,想一想,gui.Print()是调用IGui1.Print()还是调用IGui2.Print()呢?
郑重声明:本文中参考了MSDN。
这只是我一些粗浅的看法,请大家多多指点!!