问题描述
classProgram:IShape1,IShape2{staticvoidMain(string[]args){ProgramobjProgram=newProgram();objProgram.DrawRectangle();objProgram.DrawCircle();((IShape1)objProgram).DrawCircle();((IShape2)objProgram).DrawCircle();Console.ReadLine();}publicvoidDrawRectangle(){Console.WriteLine("DrawaRectangle");}voidIShape1.DrawRectangle(){Console.WriteLine("DrawaIShape1.Rectangle");}publicvoidDrawCircle(){Console.WriteLine("DrawaCircle");}voidIShape1.DrawCircle(){Console.WriteLine("DrawaIShape1.Circle");}voidIShape2.DrawCircle(){Console.WriteLine("DrawaIShape2.Circle");}}interfaceIShape1{voidDrawRectangle();voidDrawCircle();}interfaceIShape2{voidDrawCircle();}运行没有问题,结果也能得到,我想问就是:程序接口中的方法可以用显示实现的同时也用一般的实现,而且如果两个接口中有同名的方法,可以只用一个public的同名方法实现,这是问什么呢??
解决方案
解决方案二:
这个有什么问题?同名的方法如果所处理的逻辑相同,那么为什么要显示写两个?
解决方案三:
不写接口名称,直接写publicvoidDrawCircle(){}
解决方案四:
我想问1.publicvoidDrawCircle()这一个方法为什么就可以实现了两个接口??2.publicvoidDrawRectangle()和voidIShape1.DrawRectangle()为什么可以同时存在呢?附:我是c#新人
解决方案五:
C#编程指南显式接口实现(C#编程指南)如果类实现两个接口,并且这两个接口包含具有相同签名的成员,那么在类中实现该成员将导致两个接口都使用该成员作为它们的实现。例如:C#复制代码interfaceIControl{voidPaint();}interfaceISurface{voidPaint();}classSampleClass:IControl,ISurface{//BothISurface.PaintandIControl.Paintcallthismethod.publicvoidPaint(){}}然而,如果两个接口成员执行不同的函数,那么这可能会导致其中一个接口的实现不正确或两个接口的实现都不正确。可以显式地实现接口成员--即创建一个仅通过该接口调用并且特定于该接口的类成员。这是使用接口名称和一个句点命名该类成员来实现的。例如:C#复制代码publicclassSampleClass:IControl,ISurface{voidIControl.Paint(){System.Console.WriteLine("IControl.Paint");}voidISurface.Paint(){System.Console.WriteLine("ISurface.Paint");}}类成员IControl.Paint只能通过IControl接口使用,ISurface.Paint只能通过ISurface使用。两个方法实现都是分离的,都不可以直接在类中使用。例如:C#复制代码SampleClassobj=newSampleClass();//obj.Paint();//Compilererror.IControlc=(IControl)obj;c.Paint();//CallsIControl.PaintonSampleClass.ISurfaces=(ISurface)obj;s.Paint();//CallsISurface.PaintonSampleClass.显式实现还用于解决两个接口分别声明具有相同名称的不同成员(如属性和方法)的情况:C#复制代码interfaceILeft{intP{get;}}interfaceIRight{intP();}为了同时实现两个接口,类必须对属性P和/或方法P使用显式实现以避免编译器错误。例如:C#复制代码classMiddle:ILeft,IRight{publicintP(){return0;}intILeft.P{get{return0;}}}此类问题请先查阅msdn:http://msdn2.microsoft.com/zh-cn/library/ms173157(vs.80).aspx
解决方案六:
其实你所问的就是隐式接口实现与显示接口实现的访问权限的问题,显示接口实现只能由相应接口来调用 而不能由类来进行调用