• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

C#显式接口和隐式接口

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

接口的实现分为:隐式实现和显式实现。如果类或者结构要实现的是单个接口,可以使用隐式实现,如果类或者结构继承了多个接口那么接口中相同名称成员就要显式实现。显示实现是通过使用接口的完全限定名来实现接口成员的。
使用显式接口成员执行体通常有两个目的:
1、因为显式接口成员执行体不能通过类的实例进行访问,这就可以从公有接口中把接口的实现部分单独分离开。如果一个类只在内部使用该接口,而类的使用者不会直接使用到该接口,这种显式接口成员执行体就可以起到作用。
2、显式接口成员执行体避免了接口成员之间因为同名而发生混淆。如果一个类希望对名称和返回类型相同的接口成员采用不同的实现方式,这就必须要使用到显式接口成员执行体。如果没有显式接口成员执行体,那么对于名称和返回类型不同的接口成员,类也无法进行实现。
example:

代码
/// <summary>
/// IGoodbye interface
/// </summary>
public interface IGoodbye
{
void Speak();
void Bye();
}

/// <summary>
/// IHello interface
/// </summary>
public interface IHello
{
void Speak();
}

/// <summary>
/// ISay interface
/// </summary>
public interface ISay
{
void Say();
}

---------------------------------
/// <summary>
/// 隐式接口实现
/// </summary>
public class Hello : ISay, IHello
{
public Hello()
{
}

public void Say()
{
Console.WriteLine(
"Say Hello");
}

public void Speak()
{
Console.WriteLine(
"Speak Hello");
}
}

/// <summary>
/// 显式接口实现
/// </summary>
public class Speak : IHello, IGoodbye
{
public Speak()
{
}

void IHello.Speak()
{
Console.WriteLine(
"Hello");
}

void IGoodbye.Speak()
{
Console.WriteLine(
"Good Bye");
}

void IGoodbye.Bye()
{
Console.WriteLine(
"Bye-Bye");
}
}



 

 

-------------------------
上面的显式实现,不能如此调用。
Speak speak = new Speak();
speak.Speak(); 这里是不成功的。
只能这么用: ((IHello)speak).Speak();

或者这样调用:

Speak speak = new Speak();
speak .Speak();
//错误:不同的方法
IHello control = speak ;
control.Speak();
//调用 Speak的Speak方法

 

 



上述代码中对speak.Speak()的调用是错误的,因为speak 本身并没有提供这一方法。control.Speak( )是正确的调用方式。
 注释:接口本身不提供所定义的成员的实现,它仅仅说明这些成员,这些成员必须依靠实现接口的类或其它接口的支持。

--------------
而隐式实现,就可以直接调用。

Hello hello = new Hello();
hello.Say();
hello.Speak();

 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap