热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

由猫捉老鼠想起的——关于继承、接口和引用

用C#写了几年的网站,虽然感觉上没什么问题了,但是对于基础知识一直都是模模糊糊的,最近几天重新学习了一下基础知识,感受颇深。对于类、封装、继承、多态、接口等有了新的认识。我想说说我的想法,请大家看看对
用C#写了几年的网站,虽然感觉上没什么问题了,但是对于基础知识一直都是模模糊糊的,最近几天重新学习了一下基础知识,感受颇深。对于类、封装、继承、多态、接口等有了新的认识。

我想说说我的想法,请大家看看对不对。用猫捉老鼠来举个例子吧。

语言:C#


先来看看猫,猫有爪子、牙齿、胡须等等,这些都是天生的,也可以说是继承基类得到的。(继承)

再来看看猫捉老鼠的本领,(接口)
1、不只是猫能捉老鼠,蛇、猫头鹰等其他动物也可以捉老鼠。
2、猫捉老鼠的功能不是与生俱来的,而是后天学习的,如果不学习的话,那么猫就失去了捉老鼠的能力,学习不好的话也很难捉到老鼠。

说了这么多是想说明,捉老鼠的功能可以看作是一个接口,各种动物都可以继承(当然也可以不继承),光继承了还不行,还得去实现。自己去实现,那么就有不同的形式,也就有好有坏。

最后看看人是怎么对付老鼠的。(引用)

人呢也可以继承捉老鼠的接口,拿着板砖拍老鼠。但是人是很懒惰的同时也是很聪明的,于是人发明了老鼠药、老鼠夹,也可以买一只会捉老鼠的猫来。

那么这时 老鼠药、老鼠夹,会捉老鼠的猫 就是引用,引用一个现成的类来完成捉老鼠的功能。


我觉得接口有两个主要的功能 —— 规范命名和方便调用

比如可以写一个捉老鼠的接口,不管是什么只要有捉老鼠的功能那么久的继承捉老鼠的接口,然后去实现这个功能,功能(函数)的名称是相同的。

那么在调用捉老鼠的功能(函数)的时候,可以直接使用这个接口,而不用管具体是什么动物实现了捉老鼠的功能。


如果说接口实现了多继承,我觉得有点不大对劲。其实类完全可以直接实现多继承,C++就可以的。不知道是什么原因C#里面就给去掉了,弄个接口来代替。但是接口是“只定义不实现”的,是不是有点郁闷呢。

什么?您说猫捉老鼠和蛇捉老鼠是不一样的,这也对,但是我们可以用重写来实现呀。


其实有的时候使用“引用”的方式可以更好的解决问题。

当然我并不是说接口不好,也不是说不应该使用接口。只是想说不要太死板,灵活一点,该用什么就用什么。

还是那句话说得好:不管是黑猫白猫捉到耗子就是好猫!


PS:瞎说了几句,如有错误请大家多多帮助。知道这里高手很多,请各位高手多多指教!多多感谢!

这里的帖子对我也有很大的帮助。在此表示感谢!



推荐阅读
  • 本文详细介绍了如何在Java Web服务器上部署音视频服务,并提供了完整的验证流程。以AnyChat为例,这是一款跨平台的音视频解决方案,广泛应用于需要实时音视频交互的项目中。通过具体的部署步骤和测试方法,确保了音视频服务的稳定性和可靠性。 ... [详细]
  • 本文详细介绍了在C#编程环境中绘制正方形图像的技术和实现方法,通过具体示例代码帮助读者理解和掌握相关技巧。内容涵盖从基础概念到实际应用的各个方面,适合初学者和有一定经验的开发者参考。希望对您的C#学习之旅有所帮助,并激发您进一步探索的兴趣。 ... [详细]
  • 在即将离职之际,利用业务交接的空档,我萌生了记录自己入职首年心路历程的想法。大学时期,我在大连的一所二本院校度过,生活相对轻松,除了上课、编程、谈恋爱,还经常玩游戏。大四上半学期,随着毕业的临近,许多同学开始为未来的职业生涯做准备,而我也逐渐意识到需要认真规划自己的职业道路。这段经历不仅让我对职场有了初步的认识,也促使我在工作中不断学习和成长。 ... [详细]
  • 在TypeScript中,我定义了一个名为 `Employee` 的接口,其中包含 `id` 和 `name` 属性。为了使这些属性可选为空,可以通过使用 `| null` 或 `| undefined` 来扩展其类型定义。例如,`id: number | null` 表示 `id` 可以是数字或空值。这种类型的灵活性在处理不确定的数据时非常有用,可以提高代码的健壮性和可维护性。 ... [详细]
  • 在托管C++中开发应用程序时,遇到了如何声明和操作字符串数组的问题。本文详细探讨了字符串数组在托管C++中的应用与实现方法,包括声明、初始化、遍历和常见操作技巧,为开发者提供了实用的参考和指导。 ... [详细]
  • 在C#中,通过重载子窗体Form2的构造函数,可以实现从父窗体向子窗体传递值的功能。具体实现方法是在Form2中定义一个带有字符串参数的构造函数,该构造函数接收父窗体传递的值并进行初始化。然而,目前子窗体向父窗体返回值的功能尚未实现,需要进一步开发和完善。 ... [详细]
  • 程序员如何高效开发软件:实用技巧与方法
    在软件开发领域,如何提高开发效率是每个程序员关注的重点。应用软件开发涉及商业和日常生活等多个方面,其核心在于提升软件的实用性和用户体验。相较于纯粹的技术要求,应用软件更注重功能的实现和用户需求的满足。众多软件开发公司致力于这一领域,不断探索和实践高效的开发方法和技术,以确保软件的高质量交付。不同类型的应用软件,如办公自动化、财务管理、娱乐休闲等,都需根据具体应用场景进行定制化开发,以满足用户的多样化需求。 ... [详细]
  • 在尝试对从复杂 XSD 生成的类进行序列化时,遇到了 `NullReferenceException` 错误。尽管已经花费了数小时进行调试和搜索相关资料,但仍然无法找到问题的根源。希望社区能够提供一些指导和建议,帮助解决这一难题。 ... [详细]
  • 在C#中开发多线程应用程序变得高效且简便,与之前使用VB时的复杂性和局限性形成鲜明对比。C#不仅提供了丰富的多线程编程模型,还简化了线程管理、同步和通信等关键任务,使得开发者能够更加轻松地构建高性能的应用程序。此外,C#的异步编程特性进一步增强了多线程应用的开发效率和可维护性。 ... [详细]
  • C#微信开发入门教程第二篇:新手快速上手指南,含详细视频讲解
    在距离上次课程一个多星期后,我们终于带来了第二讲的内容。虽然原计划是一周一次更新,但由于工作繁忙有所延迟。近期在交流群中发现,一些初学者已经能够熟练调用微信接口,但对微信公众平台的消息接收处理机制还不够了解。因此,本次课程将详细介绍如何高效处理微信公众平台的消息接收,并提供详细的视频讲解,帮助大家快速上手。 ... [详细]
  • 在处理多个玩家的相机控制时,我遇到了一个挑战,即无法在运行时动态添加播放器子对象以转换数组类型。为了解决这个问题,我在 `CameraControl.cs` 脚本中采取了临时措施。该脚本负责根据玩家的数量动态调整相机的缩放范围,确保所有玩家都能被相机捕捉到。 ... [详细]
  • C#中实现高效UDP数据传输技术
    C#中实现高效UDP数据传输技术 ... [详细]
  • C#是一种现代、简洁且完全面向对象的编程语言,其设计受到了C、C++和Java等语言的影响。作为.NET框架的核心组成部分,C#不仅具备强大的功能,还能够支持广泛的应用系统开发,包括但不限于桌面应用程序、Web服务和移动应用。 ... [详细]
  • 在WorldWind中,双线程架构被广泛应用,但多线程环境下的数据共享问题常常被忽视,这可能导致数据修改时出现不一致的情况。尽管如此,在WorldWind的代码中并未显式地使用锁机制来解决这一问题。此外,动态内存管理也是需要关注的重点,尤其是在资源释放方面。本文将深入探讨多线程编程与锁机制在WorldWind中的应用,分析其潜在问题并提出优化建议。 ... [详细]
  • 计算 n 叉树中各节点子树的叶节点数量分析 ... [详细]
author-avatar
zjjj-jz政
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有