浅谈C#接口

发表于:2011-12-23 09:33

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:佳园    来源:51Testing软件测试网采编

  本文意在巩固基础知识,并不是对其进行深入剖析,还望理解。

  本文为原创文,难免会有一些小得瑕疵,敬请谅解。

  所有示例均是博主测试过的,如有转载请标明出处,谢谢。

  在编程中,我们经常会用到接口,那什么是接口呢?

  接口描述的是可属于任何类或结构的一组相关功能,所以实现接口的类或结构必须实现接口定义中指定的接口成员。

  接口使用interface 关键字进行定义,可由方法、属性、事件、索引器或这四种成员类型的任意组合构成。

  接口的特性:

  1、接口类似于抽象基类,不能直接实例化接口;接口中的方法都是抽象方法,实现接口的任何非抽象类型都必须实现接口的所有成员:

  当显式实现该接口的成员时,实现的成员不能通过类实例访问,只能通过接口实例访问。

  当隐式实现该接口的成员时,实现的成员可以通过类实例访问,也可以通过接口实例访问,但是实现的成员必须是公有的。

  2、接口不能包含常量、字段、运算符、实例构造函数、析构函数或类型、不能包含静态成员。

  3、接口成员是自动公开的,且不能包含任何访问修饰符。

  4、接口自身可从多个接口继承,类和结构可继承多个接口,但接口不能继承类。

  为什么不能指定接口中方法的修饰符?(面试题)

  接口中的方法用来定义对象之间通信的契约,指定接口中的方法为私有或保护没有意义。它们默认为公有方法。

interface IProgram
    {
        void Fun();
    }
    class Program:IProgram
    {
         //显式实现接口成员
        void IProgram.Fun()
        {
            Console.WriteLine("I am Fun.");
        }
        static void Main(string[] args)
        {
            IProgram p = new Program();  //声明一个接口实例,但不是对接口进行实例化
            p.Fun();
            Console.Read();
        }
    }

  上面提到,实现接口可以显式实现和隐式实现,那么这两种实现到底有什么优缺点呢?

  一般情况,当类或者结构要实现的是单个接口,可以使用隐式实现。

  如果类或者结构继承了多个接口且接口中具有相同名称成员时,就要用到显式实现,当显式实现方式存在时,隐式实现方式就失效了。

interface IProgram
    {
        void Fun();
    }
    interface IAProgram
    {
        void Fun();
    }
    class Program : IProgram, IAProgram
    {
        void IProgram.Fun()  //显式实现接口IProgram
        {
            Console.WriteLine("I am IProgram Fun.");
        }
        void IAProgram.Fun()  //显式实现接口IAProgram
        {
            Console.WriteLine("I am IAProgram Fun.");
        }
        //public void Fun()   //隐式实现接口
        //{
        //    Console.WriteLine("I am Program Fun.");
        //}
        static void Main(string[] args)
        {
            //IProgram p = new Program();
            //p.Fun();
            //IAProgram ap = new Program();
            //ap.Fun();
            Program pro = new Program();
            ((IProgram)pro).Fun();
            ((IAProgram)pro).Fun();
            Console.Read();
        }
    }

  结果为:I am IProgram Fun.

                  I am IAProgram Fun.

41/41234>
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号