面向对象的故事~数据底层操作告诉了我们接口,抽象类,继承与多态性的使用

简介:

这个问题困扰了我很久,很觉得设计的不完善,终于在今天把它彻底解决了,其实就是一个C#里的基础知识问题,主要涉及到了,接口,抽象类,接口继承,类继承,多态等知识。

事件是这样的,我有一个统一接口规范的接口,它可以由linq to sql,ado.net和ef等相关数据源去实现(只是举个例,不是实际中的代码)

 1     /// <summary>
 2     /// 数据统一接口规范
 3     /// </summary>
 4     interface ITest
 5     {
 6         /// <summary>
 7         /// 插入方法
 8         /// </summary>
 9         void Insert();
10     }

而在每一个子类中都去实现了这个接口,比如Testzzl这个实体,它去实现了这个ITest接口

 1    /// <summary>
 2     /// Testzzl实体操作
 3     /// </summary>
 4     class Testzzl :  ITestzzl
 5     {
 6         /// <summary>
 7         /// 子类也可以去复写它
 8         /// </summary>
 9         public void Insert()
10         {
11             Console.WriteLine("子类实现Insert方法");
12         }
13     }

好了,这样在使用时,可以定义接口类型的对象,通过具体的工具实现接口的多态性。

1   ITestzzl iTestzzl = new Testzzl();
2   iTestzzl.Insert();

这是我最初写的代码,我总觉得有些不爽,但又说不出来,我知道,我写了很多重复的代码,因为每个子类在实现Insert方法时,它们的代码都是相同的,除非自己逻辑上有需要,再会

真正去实现它。

在一次技术讨论中,终于被经理的所惊醒,“为何不把相同的实现逻辑放在一个基类中呢?”,于是,我改了一下代码,它变成了这样:

 1     /// <summary>
 2     /// 统一实体基类
 3     /// 子类共同的操作逻辑
 4     /// </summary>
 5     abstract class TestBase : ITest
 6     {
 7 
 8         #region ITest 成员
 9 
10         public virtual void Insert()
11         {
12             Console.WriteLine("基类统一实现Insert方法");
13         }
14 
15         #endregion
16     }

我们的子类去继承TestBase后,它可以使用基类的Insert()方法,如果子类自己的逻辑有需要,还可以去复写它,看似重复代码的问题解决了,可又有一个问题来了,我们在业务层使用

数据库对象时,一般会以接口对象进行声明,因为它可以帮助我们实现操作的多态性,下面代码出问题了

1  ITestzzl iTestzzl = new Testzzl();
2 
3  iTestzzl.Insert();

嘿,我们的Insert()方法,找不到了,这是为什么呢?原来在我们的ITestzzl接口中,并没有定义这个方法,实事上,如果希望的ITest的接口应用到ITestzzl接口上,需要去继承一个它,

于是ITestzzl接口变成了这样:

1  interface ITestzzl : ITest {
2   // Testzzl实体的一些操作逻辑
3  }

 

这时,我们在去调用Insert()方法,就正常了,呵呵,原来是子类接口没有继承统一操作接口的问题呀!

下面是实例的完整代码,供大家参考:

View Code

 本文转自博客园张占岭(仓储大叔)的博客,原文链接:面向对象的故事~数据底层操作告诉了我们接口,抽象类,继承与多态性的使用,如需转载请自行联系原博主。

目录
相关文章
|
资源调度 分布式计算 Spark
|
Cloud Native
《初识宜搭低代码》
本文主要介绍了我从第一次认识宜搭低代码到考过《低代码开发师》初级、中级和高级认证,以及参加低代码创新大赛第一届、第二届获奖的事情,其中有很多曾经的聊天截图,如今整理成册,留作纪念,同时希望也能帮助到想要考试认证《低代码开发师》的小伙伴们。最后有考试路径。
1793 0
《初识宜搭低代码》
|
前端开发 Java 物联网
GIAC-2022sh 学习笔记 | WebAssembly在前端中的应用与展望
GIAC-2022sh 学习笔记 | WebAssembly在前端中的应用与展望
540 0
GIAC-2022sh 学习笔记 | WebAssembly在前端中的应用与展望
|
前端开发 Java 程序员
接口文档生成神器-Swagger3
如果你是后端`java`开发程序员,你应该遇到过这样的场景,你的接口写完了,但是没有写接口文档,前端的小姐姐在焦急等待你的文档,那么你可能给小姐姐留下了一个不好的印象,那么有没有一款自动生成接口文档的工具呢? 答案是有,今天它来了。 `swagger`旨在帮助开发者摆脱写文档的烦恼,通过几个简单的注解,就可以生成很全面的接口文档。 本文旨在快速上手使用`swagger`生成接口文档,不得不说`swagger3`真香!!!
|
存储 监控 物联网
电信NB-IoT设备对接阿里云IoT平台实战
电信NB-IoT设备对接阿里云IoT平台实战
3924 15
电信NB-IoT设备对接阿里云IoT平台实战
|
缓存 算法
详细聊聊RecyclerView缓存机制
详细聊聊RecyclerView缓存机制
详细聊聊RecyclerView缓存机制
|
存储 机器学习/深度学习 缓存
一站式极致读吞吐,加速业务数字化转型 - 阿里云对象存储 OSS加速器解析与实践
阿里云对象存储OSS重磅推出OSS加速器功能,提供高性能、高吞吐量的数据访问服务。
8829 0
一站式极致读吞吐,加速业务数字化转型 - 阿里云对象存储 OSS加速器解析与实践
|
存储 运维 监控
容器云PaaS平台建设中应关注的重点和难点
对于企业级容器云PaaS平台,在多集群管理的模式下,每一个功能都会变得非常复杂。对于建设中的重点和难点,从以下多个方面进行了详细的方案分析和设计实现。
|
存储 SQL NoSQL
最详细的Neo4J解读(附安装教程)
**Neo4j**是一种流行的基于**Java**语言编写的图形数据库。图是一组节点和连接这些节点的关系。图形数据库也被称为**图形数据库管理系统**或**GDBMS**, 其他的图形数据库是**Oracle NoSQL数据库**,**OrientDB**,**HypherGraphDB**,**GraphBase**,**InfiniteGraph**,**AllegroGraph**。
1538 0

热门文章

最新文章