你是任天堂的老总,为了扩大营销,你做了一个活动。
活动期间内消费满一千元可以得到一个金手指。
金手指可以修改游戏数据。
本期活动的金手指效果是:回血。

在游戏中的生命值有各式各样的,像马里奥这种一个一个的,像星之卡比这种一格一格的。
像英雄联盟这样的条状血,像时命召唤这样的呼吸回血。

不用接口如何处理以下问题

1.如何不区分类型

现在你有两个游戏产品,一个条状血,一个格子血。

class 探险王
{public int Hp = 50;public int MaxHp = 100;public void 回血(){Hp = MaxHp;}
}
class 猫里奥
{public int Hp = 3;public void 回血(){Hp++;}
}

那么你如何执行这个金手指的回血效果呢?
新手的第一反应肯定是直接调用。

class 金手指
{ public static void 执行回血(探险王 game) { game.回血(); }public static void 执行回血(猫里奥 game) { game.回血(); }
}

你这样写,当然是可以运行的。
但是有什么问题存在呢?
为什么你要写两个重载?
因为这里发布了两款游戏。你发售多少款游戏就要写多少个重载。
那你打算写一千个重载?

而且第二个问题是如何更新。
任天堂的产品是现实物品。他们如果要更新就要把东西寄回去。
那如果这样的营销活动出了12期,你打算让别人每个月来来回回给你寄回12次产品?

反射是一种解决方案,虽然这不是新手内容。
利用反射,调用这个类型里名为回血的方法。这样就可以不区分具体类型。

class 金手指
{public static void 执行回血(object game){Type type = game.GetType();var m = type.GetMethod("回血");m.Invoke(game, Array.Empty<object>());}
}

2.如何知道你要执行哪个方法

有一天,你找了一个外包厂家,让他们帮你完成剩余内容。
他们知道你有一个金手指,需要写一个回血方法。
但是他们下意识地,加上了金手指的名字。

class 探险王2辉煌大陆
{public int Hp = 50;public int MaxHp = 100;public void _2019期金手指_回血(){Hp = MaxHp;}
}

反射找不到名为“回血”的方法,于是就报错了。

3.如何知道这个类是不是支持你要做的事

有一天,一个人把这个回血金手指。插到了三星学习机上。
巧了,这个学习机也有一个回血方法。

class 三星学习机
{public void 回血(){Console.WriteLine("这个词读作:hui xue");}
}

接口如何解决上述问题

首先制作回血接口,并让探险王和猫里奥实现他

interface I回血
{public void 回血();
}
class 探险王 : I回血
{public int Hp = 50;public int MaxHp = 100;public void 回血(){Hp = MaxHp;}
}
class 猫里奥 : I回血
{public int Hp = 3;public void 回血(){Hp++;}
}

1.不区分类型

接口可以进行类型转换

探险王 tan = new 探险王();
I回血 Itan = tan;

而方法的参数也是一个变量,也是可以做类型转换的。

class 金手指
{public static void 执行回血(I回血 game){game.回血();}
}

调用的时候就直接传入进入

探险王 tan = new 探险王();
猫里奥 mao = new 猫里奥();金手指.执行回血(tan);
金手指.执行回血(mao);

2.指示执行哪个方法

外包厂家拿到了你的接口类型,继承了你的接口。
并且告诉接口:如果你要执行回血的话,执行_2019期金手指_回血

class 探险王2辉煌大陆 : I回血
{public int Hp = 50;public int MaxHp = 100;public void _2019期金手指_回血(){Hp = MaxHp;}void I回血.回血() => _2019期金手指_回血();
}

3.如何知道是否支持

如果一个类不继承接口,那他当然是无法进行类型转换的。

4.如果要新增支持的类

那么你只需要把这个类在制作时支持接口就行了。

而你已经分发出去的金手指,从制作完成到落入历史的垃圾堆,
都不需要再改变他了。

class 金手指
{public static void 执行回血(I回血 game){game.回血();}
}

c#接口是什么,为什么要用接口相关推荐

  1. php 类 接口的区别吗,PHP的接口类(interface)和抽象类(abstract)的区别

    /** * 接口类:interface * 其实他们的作用很简单,当有很多人一起开发一个项目时,可能都会去调用别人写的一些类, * 那你就会问,我怎么知道他的某个功能的实现方法是怎么命名的呢,这个时候 ...

  2. 某小公司RESTful、共用接口、前后端分离、接口约定的实践

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试资料 作者:邵磊 juejin.im/post/59eafab36fb9 ...

  3. java接口匿名内部类_JAVA技术分享:接口,内部类,匿名内部类

    原标题:JAVA技术分享:接口,内部类,匿名内部类 接口: 接口中只有抽象方法,而没有非抽象方法 特点: 1:接口不能被实例化,只能通过多态的形式,让子类实例化 2:接口的子类 A:可以是具体类,但是 ...

  4. 接口入参形式_某小公司RESTful、共用接口、前后端分离、接口约定的实践

    点击上方"后端技术精选",选择"置顶公众号" 技术文章第一时间送达! 作者:邵磊 juejin.im/post/59eafab36fb9a045076eccc3 ...

  5. java接口深入理解,深入理解Java接口

    从java接口是什么到为什么,理解java接口,主要解决三个问题 1.java接口是什么 2.java接口为什么 3.java接口怎么用 java接口是什么 接口是方法的抽象,通过接口规定类需要实现那 ...

  6. 支付接口教程,详解支付宝接口(二)

    支付宝的接口向来集成过程都让人觉得比较舒服,只有APP支付相对复杂,但也只是配置上复杂一些,只要清楚原理相信也不是什么难事.下面是以前介绍双钥加密原理的传送门: 支付接口教程特别篇,公钥与私钥,双钥加 ...

  7. wordpress 外部数据接口_WordPress Plugin API(插件接口)

    简介 本文介绍的是一些为 WordPress 插件开发者提供的 API (编程语言接口),以及如何调用这些接口. 阅读本文之前,请先参考开发一个插件,以便了解一些关于插件的概况和详情.文本着重于&qu ...

  8. api接口参数加密_解决API接口开发安全性的四种方案

    如今各种API接口层出不穷,一个API的好与不好有很多方面可以考量,其中"安全性"是一个API接口最基本也是最重要的一个特点.尤其是对于充值缴费类的API接口来说,如话费充值API ...

  9. java接口返回值_java后台调用接口并返回值

    import java.io.BufferedReader; import java.io.DataOutputStream; import java.io.IOException; import j ...

  10. java的知识点13——多态、对象的转型(casting)、final关键字、抽象方法和抽象类、接口的作用、如何定义和使用接口?、接口的多继承、面向接口编程

    多态 多态指的是同一个方法调用,由于对象不同可能会有不同的行为.现实生活中,同一个方法,具体实现会完全不同. 多态的要点: 1. 多态是方法的多态,不是属性的多态(多态与属性无关). 2. 多态的存在 ...

最新文章

  1. centos --- phpunit 安装过程
  2. Oracle 数据库EM访问多个Instance
  3. 欠拟合、过拟合及其解决方法
  4. JavaXml教程(一)简介
  5. osadmin php,OSAdmin - PHP开源管理后台
  6. HarmonyOS之深入解析通知的使用
  7. 云服务器维护人员,云服务器维护工作难吗
  8. DC保存至BMP图像
  9. sql between包括两端吗_SQL大全
  10. Jib –为Spring Boot应用程序构建docker映像
  11. 计算机工程师分级_这些是每个计算机工程师都应该知道的数字
  12. 【原】如何实现IE6下块级元素的内容自动收缩
  13. Numpy——浅拷贝与深拷贝
  14. 【小白冲冲冲!!!】补1: 说一下最大化后验概率
  15. Nginx源码分析 - 实战篇 - 编写一个自定义的模块(24)
  16. 认真,respect!
  17. 【转载】哇!!!这个真的是我见过最全的端口介绍了
  18. java中文字符串转化成英文字母
  19. ListView优化之ViewHolder
  20. 自学编程到底有多难?

热门文章

  1. DNS域名解析服务详解
  2. 2020 中国软件 100 强,腾讯第二、阿里第三,第一是谁呢?你们公司上榜了吗?
  3. Mybatis---ResultMap及分页
  4. 新飞飞不显示服务器列表,新飞飞8月15日停服公告及停机期间游戏数据说明
  5. 全球及中国光学空间光调制器(SLM)行业研究及十四五规划分析报告
  6. 「人物特写」清华大学邓志东:“特征提取+推理”的小数据学习才是AI崛起的关键...
  7. yDAI受创 Curve“喜”收意外之财
  8. Valgrind基本用法
  9. 二手房买卖信息管理系统
  10. 机器学习 2014斯坦福大学课程: 4-1 神经网络