之前一直不理解接口这一概念,今天无意中翻书,网上查资料悟道其中的道理,现在工作没有用到interface这一块,怕以后会遇到忘记实现的方法便记录下来,哪里写的不对希望读者指出,话不多说,接下来看我对接口的理解。

1.接口说明:

  接口为不同应用的实现提供了一中规范和约束,只要每个应用都遵守这种规范和约束,整个系统就可以得到有效的组织,从而为应用系统的低代价开发提供有效的途径。

  接口用于描述一组类的公共方法/公共属性. 它不实现任何的方法或属性,只是告诉继承它的类《至少》要实现哪些功能,继承它的类可以增加自己的方法。

2.接口声明:

    interface ISample
{
void f(int x); //方法
int att { get; set; } //属性(可读,可写)
event EventHandler OnDraw; //事件
string this[int index] { get; set; } //索引器
}

3.接口使用注意事项:

.接口可以继承。

.类要继承接口的所有东西

.接口不能继承类

.一个类可以继承多个接口

.接口的修饰符可以是 new、public、protected、internal、private

.接口成员前面不允许有修饰符,都默认为公有成员(public)

.接口成员可以分为4类:方法、属性、事件、索引器,而不能包含成员变量

4.实例

   public class Program
{
static void Main(string[] args)
{
Dog dog = new Dog();
dog.Cay(); Cat cat = new Cat();
cat.Cay(); Pig pig = new Pig();
pig.Cay(); Console.Read();
}
}
class Dog : Animal //定义狗的类
{
public void Cay() //输出狗叫声的方法
{
Console.WriteLine("汪汪汪");
}
}
class Cat : Animal //定义猫的类
{
public void Cay() //输出猫叫声的方法
{
Console.WriteLine("喵喵喵");
}
}
class Pig : Animal //定义猪的类
{
public void Cay() //输出猪叫声的方法
{
Console.WriteLine("哼哼哼");
}
} interface Animal //动物接口
{
void Cay(); //叫声的方式
}

输出的结果:

这样一看,如果想要调用Cay()方法,在Dog,Cat,Pig中直接定义不就好了,何必多次一举?

那么我们修改一下代码,再定义一个类Class,这个Class作为实现接口传入,这个类不需要继承于接口Animal:

   public class Program
{
static void Main(string[] args)
{
Class c = new Class();
Animal animal; animal = new Dog();
c.WriteCay(animal); animal = new Cat();
c.WriteCay(animal); animal = new Pig();
c.WriteCay(animal); Console.Read();
}
}
class Dog : Animal //定义狗的类
{
public void Cay() //输出狗叫声的方法
{
Console.WriteLine("汪汪汪");
}
}
class Cat : Animal //定义猫的类
{
public void Cay() //输出猫叫声的方法
{
Console.WriteLine("喵喵喵");
}
}
class Pig : Animal //定义猪的类
{
public void Cay() //输出猪叫声的方法
{
Console.WriteLine("哼哼哼");
}
}
class Class
{
public void WriteCay(Animal animal)
{
animal.Cay();
Console.WriteLine("--------------------------");
}
}
interface Animal //动物接口
{
void Cay(); //叫声的方式
}

此时的函数的结果是:

如果再来一个Monkey,Cattle,Sheep这样的类添加进来,也只需要把他们的相关类加进来,然后在Main()中稍作修改就好,扩充性特别好。

C# 接口使用方法的更多相关文章

  1. 为什么类和接口不能使用private和protected?接口的方法不能使用private、protected、default

    对于java程序员来说,java的访问权限修饰词public.protected.default.private的区别和使用肯定都不是问题,这里也不再啰嗦了,反正度娘一搜就一大把.最近在整理java ...

  2. java中获取接口(方法)中的参数名字(eclipse设置编译参数)(java8 javac -parameters)

    interface接口参数 jdk1.7及以前使用spring功能实现的: 注意: 1.该功能只能获取类的方法的参数名,不能获取接口的方法的参数名. public static void test() ...

  3. java 28 - 7 JDK8的新特性 之 接口可以使用方法

    JDK8的新特性: http://bbs.itcast.cn/thread-24398-1-1.html 其中之一:接口可以使用方法 interface Inter { //抽象方法 public a ...

  4. Spring自定义一个拦截器类SomeInterceptor,实现HandlerInterceptor接口及其方法的实例

    利用Spring的拦截器可以在处理器Controller方法执行前和后增加逻辑代码,了解拦截器中preHandle.postHandle和afterCompletion方法执行时机. 自定义一个拦截器 ...

  5. PreparedStatement接口及其方法的使用

    PreparedStatement接口是Statement接口的子接口,使用它的好处有三个 一:简化代码,便于sql语句的书写 二:有效的禁止sql语句的注入,例如:用户名和密码,使用Prepared ...

  6. XMLHttpRequest 2.0与FileReader接口的方法

    jsonpd的实现: var jsonp = function (options) { var url = options.url, params = options.params || {}, ca ...

  7. as3.0 interface接口使用方法

    [转]as3.0 interface接口使用方法 AS在2.0的时候就支持接口了 接口能够让你的程序更具扩展性和灵活性,打个例如 比方你定义了一个方法 代码: public function aMet ...

  8. java接口的方法默认都是public abstract类型

    java接口的方法默认都是public abstract类型, 因此我们在编写接口的实现类的时候,方法的实现前面要显式的加上public访问控制符

  9. 关于Override在JDK1.5和JDK1.6上子类实现接口中方法使用@Override注解编译错误.

    遇到这个问题说来也怪.新开了一个path的工作空间用来打patch.该Eclipse的默认全局的编译版本是1.6.但是唯独其中的一个插件项目的版本是1.5(可能是唯一的一个,不确定,不知道为什么会是这 ...

  10. spring aop pointcut 切入点是类的公共方法(私有方法不行),还是接口的方法

    spring aop pointcut 切入点是类的公共方法(私有方法不行),还是接口的方法 类的公共方法可以,但是私有方法不行 测试一下接口的方法是否能够捕捉到

随机推荐

  1. Power BI连接SSAS(微软的分析服务)进行权限控制(本地部署)

    尬聊...... 在干活之前先尬聊一会儿 丸子我在10月下旬左右就开始弄power BI连接SSAS进行权限控制的问题,中间也是历经波折,看了网上很多资料,可是都是SSAS怎么进行权限控制,没有SSA ...

  2. vue打包之后生成一个配置文件修改接口

    前言: 我们的vue代码打包上传到服务器之后, 要是数据接口 以后换了域名什么的,是不是需要重新去vue文件里修改接口. 能不能生成一个配置文件,里面可以配置域名或其它什么字段之类的,这样以后换了域名 ...

  3. [转载] Bitmap的秘密

    转载自http://www.infoq.com/cn/articles/the-secret-of-bitmap/ 之前已经参加过几次QCon峰会,不过今年QCon 2014 上海峰会对我来说比较特别 ...

  4. 设计模式的征途—9.组合(Composite)模式

    树形结构在软件中随处可见,比如操作系统中的目录结构,公司组织结构等等,如何运用面向对象的方式来处理这种树形结构是组合模式需要解决的问题.组合模式通过一种巧妙的设计方案来使得用户可以一致性地处理整个树形 ...

  5. Android Oreo 8.0 新特性实战 Autosizing TextView --自动缩放TextView

    Android Oreo 8.0 新特性实战 Autosizing TextView --自动缩放TextView 8.0出来很久了,这个新特性已经用了很久了,但是一直没有亲自去试试.这几天新的需求来 ...

  6. YII 多表联查 纵表

    A id 与B a.id B id 与C b.id C id 与D c.id 查A读D数据 应用场景: order表 ordergoods表 goods表 merchant加盟商 order 与ord ...

  7. Unity3D游戏GC优化总结---protobuf-net无GC版本优化实践

    protobuf-net优化效果图 protobuf-net是Unity3D游戏开发中被广泛使用的Google Protocol Buffer库的c#版本,之所以c#版本被广泛使用,是因为c++版本的 ...

  8. HBuilder入门(构建h5+APP)

    if(window.plus) { plusReady(); } else { //plusready事件(自带事件)调用了才可使用h5+API document.addEventListener(& ...

  9. SQL知识目录

    SQL理论知识 -------理论知识总结 -------理论知识总结 -------理论知识总结 -------理论知识总结 -------理论知识总结 -------理论知识总结 -------理 ...

  10. QuickTime视频解析问题

    在QuickTime中可以解析出视频并播放视频,解析的格式后缀名为.mov,之后将该视频导入到Unity Project中,显示未解析到视频文件,本来应该会自动生成MovieTexture材质,但是并 ...