前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >温故知新:接口的隐式实现与显式实现

温故知新:接口的隐式实现与显式实现

作者头像
菩提树下的杨过
发布2018-01-23 16:28:57
6960
发布2018-01-23 16:28:57
举报
文章被收录于专栏:菩提树下的杨过

这二者的区别,仅在一个类同时实现多个接口,且多个接口中有相同的方法名字定义时,才有比较的意义。

代码语言:javascript
复制
using System;

namespace InterfaceTest
{
    class Program
    {
        static void Main(string[] args)
        {
            TestAB ab = new TestAB();
            ab.HelloWorld(); //Hello World!           

            IB b = ab as IB;
            b.HelloWorld(); //IB.HelloWorld!

            IA a = ab as IA;
            a.HelloWorld(); //IA.HelloWorld!

            Console.Read();
        }
    }

    //IA的接口定义
    interface IA
    {
        void HelloWorld();
    }

    //IB的接口定义
    interface IB
    {
        void HelloWorld();
    }

    class TestAB : IA, IB
    {
        //隐式实现IA与IB的HelloWorld方法
        public void HelloWorld()
        {
            Console.WriteLine("Hello World!");            
        }

        //显式实现IB接口的HelloWorld方法
        void IB.HelloWorld()
        {
            Console.WriteLine("IB.HelloWorld!");
        }

        //显式实现IA接口的HelloWorld方法
        void IA.HelloWorld()
        {
            Console.WriteLine("IA.HelloWorld!");
        }       
    }
}

输出结果已经说明了问题,就不多做解释了。

结论:

1、对于显式实现的接口方法,在类实例上调用时,需要显式转换为指定的接口,然后才能正确调用。

2、如果类实例不显式转换接口,直接用"类实例.接口同名方法"调用,将调用隐式实现的方法.

3、显式实现的接口方法,不能加public之类的关键字修饰。

4、通常显式实现并非必需的步骤.(本例中,可以去掉IA或IB的显式实现部分,甚至这二个显式实现都可以去掉,然后再观察下输出结果)

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2010-09-19 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档