博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C#中的interface
阅读量:5126 次
发布时间:2019-06-13

本文共 2747 字,大约阅读时间需要 9 分钟。

接口(interface

接口泛指实体把自己提供给外界的一种抽象化物(可以为另一实体),用以由内部操作分离出外部沟通方法,使其能被修改内部而不影响外界其他实体与其交互的方式。

 

接口实际上是一个约定:

如:IClonable, IComparable;

接口是抽象成员的集合:

ICloneable含有方法clone();

IComparable含有方法compare();

接口是一个引用类型,比抽象更抽象。

 

帮助实现多重继承:

 

接口的用处:

1.实现不相关类的相同行为,不需要考虑这些类的层次关系;

2.通过接口可以了解对象的交互界面,而不需要了解对象所在的类。例如:public sealed class String: ICloneable, IComparable, IConvertible, IEnumerable.

 

定义一个接口:

 

public interface IStringList //接口一般用I作为首字母{    //接口声明不包括数据成员,只能包含方法、属性、事件、索引等成员    //使用接口时不能声明抽象成员(不能直接new实例化)    void Add ( string s ) ;      int Count{ get; }     string this[int index] { get; set; } }//public abstract 默认,这两个关键词不写出来

 

 

实现接口:

 

class 类名 : [父类 , ] 接口, 接口, 接口, ..... 接口{public 方法 () { ...... }}

 

 

显示接口成员实现:

在实现多个接口时,如果不同的接口有同名的方法,为了消除歧义,需要在方法名前写接口名: void IWindow.Close(){......};

调用时,只能用接口调用: (( IWindow ) f ).Close();

 

接口示例:

using System;namespace TestInterface{    interface Runner    {        void run();    }    interface Swimmer    {        void swim();    }    abstract class Animal  //抽象类用作基类    {        abstract public void eat();    }    class Person : Animal, Runner, Swimmer    {        public void run()        {            Console.WriteLine("run");        }        public void swim()        {            Console.WriteLine("swim");        }        public override void eat()        {            Console.WriteLine("eat");        }        public void speak()        {            Console.WriteLine("speak");        }    }    class Program    {                static void m1(Runner r)        {            r.run();        }        static void m2(Swimmer s)        {            s.swim();        }        static void m3(Animal a)        {            a.eat();        }        static void m4(Person p)        {            p.speak();        }                public static void Main(string [] args)        {            Person p = new Person();            m1(p);            m2(p);            m3(p);            m4(p);            Runner a = new Person();            a.run();                        Console.ReadKey(true);        }    }}

运行结果:

 

含有同名方法的多个接口继承:

using System;class InterfaceExplicitImpl{    static void Main()    {        FileViewer f = new FileViewer();        f.Test();        ( (IWindow) f ).Close();  //强制转换,消除同名歧义                  IWindow w = new FileViewer();        w.Close();                Console.ReadKey(true);    }}  interface IWindow{    void Close();}interface IFileHandler{    void Close();}class FileViewer : IWindow, IFileHandler{    void IWindow.Close ()    {        Console.WriteLine( "Window Closed" );    }    void IFileHandler.Close()    {        Console.WriteLine( "File Closed" );    }    public void Test()    {        ( (IWindow) this ).Close(); //不同接口含有同名方法,需要在方法前面写接口名    }}

 

转载于:https://www.cnblogs.com/bincoding/p/4869804.html

你可能感兴趣的文章
用户空间与内核空间,进程上下文与中断上下文[总结]
查看>>
JAVA开发环境搭建
查看>>
Visual Studio基于CMake配置opencv1.0.0、opencv2.2
查看>>
SDN第四次作业
查看>>
django迁移数据库错误
查看>>
Data truncation: Out of range value for column 'Quality' at row 1
查看>>
字符串处理
查看>>
HtmlUnitDriver 网页内容动态抓取
查看>>
ad logon hour
查看>>
罗马数字与阿拉伯数字转换
查看>>
Eclipse 反编译之 JadClipse
查看>>
距离公式汇总以及Python实现
查看>>
Linux内核态、用户态简介与IntelCPU特权级别--Ring0-3
查看>>
第23月第24天 git命令 .git-credentials git rm --cached git stash clear
查看>>
java SE :标准输入/输出
查看>>
[ JAVA编程 ] double类型计算精度丢失问题及解决方法
查看>>
好玩的-记最近玩的几个经典ipad ios游戏
查看>>
PyQt5--EventSender
查看>>
Sql Server 中由数字转换为指定长度的字符串
查看>>
tmux的简单快捷键
查看>>