惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

D
Darknet – Hacking Tools, Hacker News & Cyber Security
V
Vulnerabilities – Threatpost
Cloudbric
Cloudbric
G
GRAHAM CLULEY
S
Securelist
Schneier on Security
Schneier on Security
Help Net Security
Help Net Security
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
Project Zero
Project Zero
Spread Privacy
Spread Privacy
P
Privacy International News Feed
C
Cyber Attacks, Cyber Crime and Cyber Security
Cisco Talos Blog
Cisco Talos Blog
T
Tailwind CSS Blog
博客园_首页
有赞技术团队
有赞技术团队
Simon Willison's Weblog
Simon Willison's Weblog
Stack Overflow Blog
Stack Overflow Blog
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
Latest news
Latest news
T
Tor Project blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
Attack and Defense Labs
Attack and Defense Labs
www.infosecurity-magazine.com
www.infosecurity-magazine.com
O
OpenAI News
J
Java Code Geeks
T
Tenable Blog
K
Kaspersky official blog
AWS News Blog
AWS News Blog
S
Security @ Cisco Blogs
The GitHub Blog
The GitHub Blog
T
Threatpost
月光博客
月光博客
H
Heimdal Security Blog
Security Latest
Security Latest
The Hacker News
The Hacker News
Y
Y Combinator Blog
A
Arctic Wolf
Apple Machine Learning Research
Apple Machine Learning Research
C
Cisco Blogs
美团技术团队
Microsoft Security Blog
Microsoft Security Blog
Hugging Face - Blog
Hugging Face - Blog
T
The Blog of Author Tim Ferriss
C
CERT Recently Published Vulnerability Notes
D
Docker
Google Online Security Blog
Google Online Security Blog
D
DataBreaches.Net
V
Visual Studio Blog
H
Help Net Security

博客园 - yinmz

mysql内置函数 mysql表结构随笔 读 你必须知道的.NET有感 设计模式依赖的软件设计原则 UML类图 [导入]《交互设计之路——让高科技产品回归人性》读书笔记(八) [导入]《交互设计之路——让高科技产品回归人性》读书笔记(七) [导入]《交互设计之路——让高科技产品回归人性》读书笔记(五) [导入]《交互设计之路——让高科技产品回归人性》读书笔记(四) [导入]《交互设计之路——让高科技产品回归人性》读书笔记(三) [导入]《交互设计之路——让高科技产品回归人性》读书笔记(二) [导入]《交互设计之路——让高科技产品回归人性》读书笔记(一) [导入]伍迷创意随想集 之 银行排队系统的改良 [导入]伍迷创意随想集 之 爱情博物馆 [导入]伍迷创意随想集 [导入]伍迷创意随想集 之 聚众广告创精品 [导入]一个通过Flash设计与Flex结合开发的网站www.mapgle.cn [导入]岁月凶残,敬请珍惜——得知早已不能过五四节时之随想 [导入]《交互设计之路——让高科技产品回归人性》读书笔记(六) [导入]《交互设计之路——让高科技产品回归人性》读书笔记(九) [导入]《大话设计模式》重印公告 [导入]伍迷随想冷饭集 [导入]伍迷之子满月时之随想 [导入]关于阅读技术类图书的思考 [导入]《大话设计模式》第三次印刷公告
C#的显式接口和隐式接口
yinmz · 2009-05-30 · via 博客园 - yinmz

接口的实现分为:隐式实现和显式实现。如果类或者结构要实现的是单个接口,可以使用隐式实现,如果类或者结构继承了多个接口那么接口中相同名称成员就要显式实现。显示实现是通过使用接口的完全限定名来实现接口成员的。
使用显式接口成员执行体通常有两个目的:
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();

个人认为