日期:2014-05-18  浏览次数:20870 次

显示实现接口和普通的实现接口有什么区别
RT

------解决方案--------------------
接口实现的一些内容如下:
一、接口实现分为显式接口实现和隐式接口实现。
二者有一些不同,显式实现就是指通过指定接口名来实现方法,隐式实现是指通过一个相同的成员方法来实现接口方法。代码示例如下:
C# code
 interface IA
 {
     string fun1();
 }
 class MyClass : IA//隐式实现接口IA
 {
     public string fun1()
     {
         return "";
     }
 }
 class MyClass : IA//显示实现接口IA
 {
     string IA.fun1()
     {
         return "";
     }
 }

------解决方案--------------------
myClass 中显示实现 fun1 

myClass Text = new myClass()
Text.fun1() 这样的调用不行 

iA Text = new myClass()
Text.fun1() 这样的可以
------解决方案--------------------
如果类实现两个接口,并且这两个接口包含具有相同签名的成员,那么在类中实现该成员将导致两个接口都使用该成员作为它们的实现。例如: 

C# 复制代码 
interface IControl
{
void Paint();
}
interface ISurface
{
void Paint();
}
class SampleClass : IControl, ISurface
{
// Both ISurface.Paint and IControl.Paint call this method.
public void Paint()
{
}
}


 

然而,如果两个接口成员执行不同的函数,那么这可能会导致其中一个接口的实现不正确或两个接口的实现都不正确。可以显式地实现接口成员 -- 即创建一个仅通过该接口调用并且特定于该接口的类成员。这是使用接口名称和一个句点命名该类成员来实现的。例如: 

C# 复制代码 
public class SampleClass : IControl, ISurface
{
void IControl.Paint()
{
System.Console.WriteLine("IControl.Paint");
}
void ISurface.Paint()
{
System.Console.WriteLine("ISurface.Paint");
}
}


 

类成员 IControl.Paint 只能通过 IControl 接口使用,ISurface.Paint 只能通过 ISurface 使用。两个方法实现都是分离的,都不可以直接在类中使用。例如: 

C# 复制代码 
SampleClass obj = new SampleClass();
//obj.Paint(); // Compiler error.

IControl c = (IControl)obj;
c.Paint(); // Calls IControl.Paint on SampleClass.

ISurface s = (ISurface)obj;
s.Paint(); // Calls ISurface.Paint on SampleClass.


 

显式实现还用于解决两个接口分别声明具有相同名称的不同成员(如属性和方法)的情况: 

C# 复制代码 
interface ILeft
{
int P { get;}
}
interface IRight
{
int P();
}


 

为了同时实现两个接口,类必须对属性 P 和/或方法 P 使用显式实现以避免编译器错误。例如: 

C# 复制代码 
class Middle : ILeft, IRight
{
public int P() { return 0; }
int ILeft.P { get { return 0; } }
}