码迷,mamicode.com
首页 > Windows程序 > 详细

C#中的接口

时间:2019-02-10 23:26:16      阅读:266      评论:0      收藏:0      [点我收藏+]

标签:main   sum   value   compare   nas   关系   的区别   理解   接口实现   

什么是接口

  • 接口可以理解为对一组方法声明进行的统一命名,但这些方法没有提供任何实现.也就是指将一组方法声明在一个接口中,在该接口中定义比较方法,然后让这些类型去继承该接口,并实现自己的比较方法

如何使用接口

  • 接口的定义

    //使用关键字 interface
    interface ICustomCompare
    {
        //定义比较方法,继承该接口的类都要实现该方法
        int CompareTo(object other);
    }
  • 继承接口

    //定义类并继承接口
    public class Person:ICustomCompare
    {
        int age;
        public int Age
        {
            get{ return age; }
            set{ age=value; }
        }
    
        //实现接口方法
        public int CompareTo(object value)
        {
            if(value==null)
            {
                return 1;
            }
            //将object类型强制转换为Person类型
            Person otherp=(Person)value;
    
            //把当前对象的Age属性与需要比较的对象Age属性进行对比
            if(this.Age < otherp.Age)
            {
                return -1;
            }
            if(this.Age > otherp.Age)
            {
                return 1;
            }
            return 0;
        }
    }

显式接口实现方式

namespace Person
{
    /// <summary>
    /// 中国人打招呼接口
    /// </summary>
    interface IChinaseGreeting
    {
        //接口方法声明
        void SayHello();
    }

    /// <summary>
    /// 美国人打招呼接口
    /// </summary>
    interface IAmericanGreeting
    {
        //接口方法声明
        void SayHello();
    }
    /// <summary>
    /// Speaker类实现了二个接口
    /// </summary>
    public class Speaker : IChinaseGreeting, IAmericanGreeting
    {
        //隐式接口的实现
        public void SayHello()
        {
            Console.WriteLine("你好");
        }
        //显式接口的实现
        void IChinaseGreeting.SayHello() {

            Console.WriteLine("你好");
        }
        void IAmericanGreeting.SayHello()
        {
            Console.WriteLine("Hello");
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
            Speaker p=new Speaker();
            //隐式调用打招呼的方法,都会输出 "你好"
            p.SayHello();

            //显式的调用中国人打招呼的方法
            IChinaseGreeting chinaseGreeting = (IChinaseGreeting)p;
            chinaseGreeting.SayHello();
            //显式的调用美国人打招呼的方法
            IAmericanGreeting americanGreeting = (IAmericanGreeting)p;
            americanGreeting.SayHello();

            Console.ReadLine();

            //输出结果
            //你好
            //你好
            //Hello
        }
    }
}
  • 若使用显式接口实现方式是,需要注意以下几个问题
    • 方法不能使用任何访问修饰符,显式实现的成员默认为私有
    • 显式实现的成员默认是私有的,所以这些成员都不能通过类的对象进行访问
  • 显式与隐式接口的区别
    • 采用隐式接口实现时,类和接口都可以访问接口中的方法;而若采用显式接口实现实现方式,接口方法只能通过接口来完成访问,因为此时接口方法默认为私有
    • 当类实现多个接口,并且接口中包含相同的方法名称,参数和返回类型是,则应使用显式接口实现方式.

接口与抽象类

  • 接口与抽象类的区别
    • 抽象类使用abstract关键字进行定义,而接口使用interface关键字定义;它们都不能进行实例化
    • 抽象类中可包含虚方法,非抽象方法和静态成员;但接口中不能包含虚方法和任何静态成员,并且接口中只能定义方法,不能具体实现,方法和具体实现由实现类完成
    • 抽象类不能实现多继承,接口则支持多继承.
    • 抽象类是对一类对象的抽象,继承于抽象类的类的类与抽象类为属于的关系;而类实现接口只是代表实现类具有接口声明的方法,是一种can-do 的关系.所以一般接口后都带有able字段,表示"我能走"的意思;

C#中的接口

标签:main   sum   value   compare   nas   关系   的区别   理解   接口实现   

原文地址:https://www.cnblogs.com/youMo/p/10360400.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!