c# 中的抽象类、接口、密封类、虚方法介绍

1、抽象类

如果一个类没有具体的实现,只表现一种抽象概念,并且仅仅只作为自己派生类的一个基类出现,那么这样的类称作抽象类。抽象类中由abstract修饰的方法称之为抽象方法。

(1)抽象类声明和特点

抽象类的声明由:abstract  class + 类名称组成。

抽象类的特点

抽象类不能直接实例化

抽象类不能被密封

抽象类中可以有抽象方法和非抽象方法,抽象方法必须其派生类来实现,实现时必须用 override 来重载,抽象类中的抽象方法不能用virtual、static、private 来修饰

(2)抽象类的作用

抽象类是一种高度的概括,因为他必须靠其派生类来实现,所以抽象类更方便我们扩展。

(3)实例通过抽象类和抽象方法来实现数据库的最基本操作

  public abstract class ABaseRepository<T> where T : class,new()
    {
        /// <summary>
        /// 是否存在该记录
        /// </summary>
        /// <param name="where">查询条件</param>
        /// <returns></returns>
        public abstract bool Exists(string where);

        /// <summary>
        /// 增加
        /// </summary>
        /// <param name="model">实体</param>
        /// <returns></returns>
        public abstract bool AddModel(T model);

        /// <summary>
        /// 删除
        /// </summary>
        /// <param name="model">实体</param>
        /// <returns></returns>
        public abstract bool DeleteModel(T model);

        /// <summary>
        /// 批量删除
        /// </summary>
        /// <param name="where">条件</param>
        /// <returns></returns>
        public abstract bool DeleteModels(string where);

        /// <summary>
        /// 修改
        /// </summary>
        /// <param name="model">实体</param>
        /// <returns></returns>
        public abstract bool UpdateModel(T model);

        /// <summary>
        /// 查询
        /// </summary>
        /// <param name="where">查询条件</param>
        /// <returns></returns>
        public abstract DataSet LoadModels(string where);

        /// <summary>
        /// 分页查询
        /// </summary>
        /// <param name="pageSize">页条数</param>
        /// <param name="pageIndex">当前页</param>
        /// <param name="totalCount">总条数</param>
        /// <param name="where">条件</param>
        /// <param name="orderBy">排序</param>
        /// <returns></returns>
        public abstract DataSet LoadPageModels(int pageSize, int pageIndex, out int totalCount, string where, string orderBy);
    }

2、接口
接口是一种行为规范,是一种协定,是对象与对象之间的一种约束

(1)接口的声明和特点

接口的声明:接口的申明和抽象类很像只是关键字换做 interface ,interface + 接口名称

特点:

接口的最大特点是可以实现多继承而类只能实现单一继承,一个接口可以继承多个接口。

接口类似于抽象基类不能被实例化,必须有其派生的子类去实现。

接口不能包含常量、字段、运算符、实例构造函数、析构函数、类型、不能包含静态成员。

接口中成员不能用new、public、protected、internal、private、static、abstract、override、virtual 修饰符修饰

(2)接口作用

实现多继承,提供约束条件方便管理

(3)实例

public interface IBaseRepository<T> where T : class,new()
    {
        /// <summary>
        /// 是否存在该记录
        /// </summary>
        /// <param name="where">查询条件</param>
        /// <returns></returns>
        bool Exists(string where);

        /// <summary>
        /// 增加
        /// </summary>
        /// <param name="model">实体</param>
        /// <returns></returns>
        bool AddModel(T model);

        /// <summary>
        /// 删除
        /// </summary>
        /// <param name="model">实体</param>
        /// <returns></returns>
        bool DeleteModel(T model);

        /// <summary>
        /// 批量删除
        /// </summary>
        /// <param name="where">条件</param>
        /// <returns></returns>
        bool DeleteModels(string where);

        /// <summary>
        /// 修改
        /// </summary>
        /// <param name="model">实体</param>
        /// <returns></returns>
        bool UpdateModel(T model);

        /// <summary>
        /// 查询
        /// </summary>
        /// <param name="where">查询条件</param>
        /// <returns></returns>
        DataSet LoadModels(string where);

        /// <summary>
        /// 分页查询
        /// </summary>
        /// <param name="pageSize">页条数</param>
        /// <param name="pageIndex">当前页</param>
        /// <param name="totalCount">总条数</param>
        /// <param name="where">条件</param>
        /// <param name="orderBy">排序</param>
        /// <returns></returns>
        DataSet LoadPageModels(int pageSize, int pageIndex, out int totalCount, string where, string orderBy);
    }

3、密封类

密封类是一种不可以派生的类,密封类不能用作基类,由sealed 修饰的方法称之为密封方法

(1)密封类的声明和特点

密封类的声明:sealed class + 类名称

特点:

不可派生

密封类中的方法不能用virtual 、abstract来修饰

(2)密封类的作用

防止类被继承

(3)举例

        public sealed class myClass     //声明密封类  
        {        
      
            public void method()        
            {            
                Console.WriteLine("这是个密封类");        
            }    
        }

4、虚方法

如果一个方法包含virtual 修饰符称之为虚方法,没有的话称之为非虚方法(msdn)

(1)虚方法的声明和特点

虚方法的声明:virtual +void + 方法名

虚方法的特点:

派生类可以通过override 来重载但不是必须的(注:抽象方法必须通过该类来重载)

虚方法可以直接使用和通常方法一样

(2)虚方法的作用

实现面向对象的一大要素多态。

(3)实例

    public class Pet
    {
        public virtual void Dog()
        {
            Console.WriteLine("汪汪");
        }
    }
    public class DogPet : Pet
    {

        public override void Dog()
        {
            
            Console.WriteLine("旺旺");
        }
    }
   public class Program
    {
      public   static void Main(string[] args)
        {
            var dogpet = new DogPet();
            dogpet.Dog();
        }
    }


输出结果:旺旺




 

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
第Ⅰ部分 C# 语 言 第1章 .NET体系结构.... 3 1.1 C#与.NET的关系...... 3 1.2 公共语言运行库...... 3 1.3 详细介绍间语言...... 6 1.3.1 面向对象和接口的支持..... 7 1.3.2 相异值型和引用型..... 8 1.3.3 强数据型..... 8 1.3.4 通过异常方法处理错误..... 14 1.3.5 特性的使用..... 14 1.4 程序集...... 14 1.4.1 私有程序集..... 15 1.4.2 共享程序集..... 16 1.4.3 反射..... 16 1.5 .NET Framework...... 16 1.6 命名空间...... 17 1.7 用C#创建.NET应用程序...... 18 1.7.1 创建ASP.NET应用程序..... 18 1.7.2 创建Windows窗体..... 20 1.7.3 Windows控件..... 20 1.7.4 Windows服务..... 20 1.8 C#在.NET企业体系结构 的作用...... 20 1.9 小结...... 22 第2章 C#基础.... 23 2.1 引言...... 23 2.2 第一个C#程序...... 23 2.2.1 代码..... 24 2.2.2 编译并运行程序..... 24 2.2.3 详细介绍..... 25 2.3 变量........ 27 2.3.1 变量的初始化..... 27 2.3.2 变量的作用域..... 28 2.3.3 常量..... 31 2.4 预定义数据型...... 32 2.4.1 值型和引用型..... 32 2.4.2 CTS型..... 33 2.4.3 预定义的值型..... 33 2.4.4 预定义的引用型..... 36 2.5 流控制...... 39 2.5.1 条件语句..... 39 2.5.2 循环..... 43 2.5.3 跳转语句..... 46 2.6 枚举...... 47 2.7 数组...... 49 2.8 命名空间...... 50 2.8.1 using语句..... 51 2.8.2 命名空间的别名..... 52 2.9 Main()方法...... 53 2.9.1 多个Main()方法..... 53 2.9.2 给Main()方法传送参数..... 54 2.10 有关编译C#文件的更多内容...... 55 2.11 控制台I/O.... 56 2.12 使用注释...... 58 2.12.1 源文件的内部注释..... 58 2.12.2 XML文档说明..... 59 2.13 C#预处理器指令...... 61 2.13.1 #define和 #undef. 61 2.13.2 #if, #elif, #else和#endif. 62 2.13.3 #warning和# error. 63 2.13.4 #region和#endregion.. 63 2.13.5 #line.. 64 2.13.6 #pragma.. 64 2.14 C#编程规则...... 64 2.14.1 用于标识符的规则..... 64 2.14.2 用法约定..... 65 2.15 小结...... 71 第3章 对象和型.... 72 3.1 和结构...... 72 3.2 成员...... 73 3.2.1 数据成员..... 73 3.2.2 函数成员..... 74 3.2.3 只读字段..... 88 3.3 结构...... 89 3.3.1 结构是值型..... 90 3.3.2 结构和继承..... 91 3.3.3 结构的构造函数..... 91 3.4 部分...... 92 3.5 静态...... 94 3.6 Object...... 94 3.6.1 System.Object方法..... 94 3.6.2 ToString()方法..... 95 3.7 小结...... 97 第4章 继承.... 98 4.1 继承的型...... 98 4.1.1 实现继承和接口继承..... 98 4.1.2 多重继承..... 99 4.1.3 结构和..... 99 4.2 实现继承...... 99 4.2.1 虚方法..... 100 4.2.2 隐藏方法..... 101 4.2.3 调用函数的基版本..... 102 4.2.4 抽象类和抽象函数..... 103 4.2.5 密封密封方法..... 103 4.2.6 派生的构造函数..... 104 4.3 修饰符...... 109 4.3.1 可见性修饰符..... 109 4.3.2 其他修饰符..... 110 4.4 接口...... 111 4.4.1 定义和实现接口..... 112 4.4.2 派生的接口..... 116 4.5 小结...... 118 第5章 运算符和型强制转换.... 119 5.1 运算符...... 119 5.1.1 运算符的简化操作..... 120 5.1.2 三元运算符..... 121 5.1.3 checked和unchecked运算符..... 122 5.1.4 is运算符..... 123 5.1.5 as运算符..... 123 5.1.6 sizeof运算符..... 123 5.1.7 typeof运算符..... 124 5.1.8 可空型和运算符..... 124 5.1.9 空接合运算符..... 124 5.1.10 运算符的优先级..... 125 5.2 型的安全性...... 125 5.2.1 型转换..... 126 5.2.2 装箱和拆箱..... 130 5.3 对象的相等比较...... 130 5.3.1 引用型的相等比较..... 131 5.3.2 值型的相等比较..... 132 5.4 运算符重载...... 132 5.4.1 运算符的工作方式..... 133 5.4.2 运算符重载的示例: Vector结构..... 134 5.5 用户定义的数据型转换...... 141 5.5.1 执行用户定义的型转换..... 142 5.5.2 多重数据型转换..... 149 5.6 小结...... 152 第6章 委托和事件.... 153 6.1 委托...... 153 6.1.1 在C#声明委托..... 154 6.1.2 在C#使用委托..... 155 6.2 匿名方法...... 158 6.2.1 简单的委托示例..... 159 6.2.2 BubbleSorter示例..... 161 6.2.3 多播委托..... 164 6.3 事件...... 166 6.3.1 从客户的角度讨论事件..... 167 6.3.2 生成事件..... 169 6.4 小结...... 173

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值