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
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值