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

简介:

这个问题困扰了我很久,很觉得设计的不完善,终于在今天把它彻底解决了,其实就是一个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

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

目录
相关文章
|
2月前
|
Java 编译器
封装,继承,多态【Java面向对象知识回顾①】
本文回顾了Java面向对象编程的三大特性:封装、继承和多态。封装通过将数据和方法结合在类中并隐藏实现细节来保护对象状态,继承允许新类扩展现有类的功能,而多态则允许对象在不同情况下表现出不同的行为,这些特性共同提高了代码的复用性、扩展性和灵活性。
封装,继承,多态【Java面向对象知识回顾①】
|
6月前
|
Serverless PHP
当谈论面向对象编程时,这四个概念是非常重要的。以下是对接口、继承、封装和多态的简要说明
本文介绍了面向对象编程的四个核心概念:接口、继承、封装和多态。接口定义对象的行为规范,类通过实现接口确保符合所需行为。继承允许在已有类基础上创建新类,实现代码重用。封装是将数据和操作捆绑并隐藏内部细节,提高安全性和可维护性。多态使对象在运行时能表现出不同行为,增加代码灵活性和可扩展性。文中还提供了代码示例来说明这些概念。
40 0
|
6月前
|
C#
C# 继承、多态性、抽象和接口详解:从入门到精通
在 C# 中,可以将字段和方法从一个类继承到另一个类。我们将“继承概念”分为两类: 派生类(子类) - 从另一个类继承的类 基类(父类) - 被继承的类 要从一个类继承,使用 : 符号。 在以下示例中,Car 类(子类)继承了 Vehicle 类(父类)的字段和方法:
104 2
|
6月前
|
编译器 C++
[C++] 面向对象的三大特性:封装、继承和多态
[C++] 面向对象的三大特性:封装、继承和多态
80 0
|
设计模式 数据安全/隐私保护
面向对象编程基础:封装、继承、多态与抽象的全面解析
面向对象编程基础:封装、继承、多态与抽象的全面解析
156 0
|
Java C++
面对对象三大特性:封装、继承、多态
面对对象三大特性:封装、继承、多态
浅谈 面向对象三大特性:封装 继承 多态
浅谈 面向对象三大特性:封装 继承 多态
90 0
|
存储 Java 数据库
Java面向对象之封装和继承
本篇文章记录博主对面向对象部分的学习,带大家认识Java基础知识——包与继承,后续内容将持续更新。
84 0
Java面向对象之封装和继承
|
Java
java面向对象三大特性,继承篇
1.继承的概念 继承是java面向对象编程技术的一块基石,因为它允许创建分等级层次的类。 继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法,使得子类具有父类相同的行为。
153 0
java面向对象三大特性,继承篇
系统认知Java接口、接口与继承、接口与多态
在面向对象的基础之上,接口的出现是类性质的一种完善,是继承机制的一种补充,是体现多态性的一种形式。从生活实际出发,接口把它之下一系列复杂的逻辑,功能等通过“实现接口”的方式封装简化出来,只通过连接一个小小的口子就轻而易举地实现了背后实则很复杂的功能。我想这就是接口存在的意义所在吧。
210 0
系统认知Java接口、接口与继承、接口与多态