当前位置: 首页 > news >正文

深圳快速网站制作哪里好电商网平台

深圳快速网站制作哪里好,电商网平台,怎么建立一个网站平台高考加油,黄冈网站抽象类 (abstract class): 不能直接实例化,只能被继承。 用来定义一套基础框架和规范,强制子类必须实现某些方法(抽象方法)。 可用来封装一些共通的逻辑,减少代码重复。 虚方法 (virtual): …

抽象类 (abstract class):

  • 不能直接实例化,只能被继承。

  • 用来定义一套基础框架和规范,强制子类必须实现某些方法(抽象方法)。

  • 可用来封装一些共通的逻辑,减少代码重复。

虚方法 (virtual):

  • 表示这个方法可以被子类重写(override)

  • 默认给了一套实现,你可以用,也可以替换掉

  • 避免了子类必须每次都写重复代码(子类用基类实现就好)

总结:

抽象类 + 虚方法组合使用的好处是:

  • 提供一个统一的接口和逻辑框架

  • 允许子类在不破坏主结构的情况下实现个性化逻辑(比如加缓存、记录日志)

🔗 组合使用的优势

抽象类 + 虚方法
✅ 定义统一规范和基础结构
✅ 提供默认逻辑(虚方法)
✅ 允许子类按需定制(重写虚方法)
✅ 提高代码复用性、可维护性
✅ 非侵入式扩展逻辑(如:记录日志、缓存等)

 🔧 举个实际应用场景(例如仓储):

public abstract class BaseRepository<T>
{public virtual void Add(T entity){// 默认实现:记录日志 + 保存Console.WriteLine("添加前记录日志");Save(entity);}protected abstract void Save(T entity); // 强制子类必须实现
}
public class UserRepository : BaseRepository<User>
{protected override void Save(User entity){// 实现具体的保存逻辑Console.WriteLine("保存用户到数据库");}public override void Add(User entity){// 也可以选择重写 Add,增加缓存逻辑等base.Add(entity);Console.WriteLine("添加用户成功");}
}

✅ 示例代码:调用 UserRepository

public class Program
{public static void Main(string[] args){var userRepo = new UserRepository();var newUser = new User { Id = 1, Name = "张三" };userRepo.Add(newUser);/* 日志打印结果添加前记录日志保存用户到数据库添加用户成功*/}
}// 假设 User 类如下:
public class User
{public int Id { get; set; }public string Name { get; set; }
}

🎯 实战目标

构建一个 基于接口 + 抽象类 + 泛型 的通用仓储:

  • 支持常规操作(增删改查)

  • 支持扩展方法(如分页、条件查询)

  • 易于继承 & 复用


🧩 步骤一:定义接口 IRepository<T>

public interface IRepository<T> where T : class
{Task<T> GetByIdAsync(int id);Task<IEnumerable<T>> GetAllAsync();Task AddAsync(T entity);void Update(T entity);void Delete(T entity);
}

🧱 步骤二:实现抽象类 BaseRepository<T>

以 EF Core 为例,注入 DbContext

public abstract class BaseRepository<T> : IRepository<T> where T : class
{protected readonly DbContext _context;protected readonly DbSet<T> _dbSet;public BaseRepository(DbContext context){_context = context;_dbSet = _context.Set<T>();}public virtual async Task<T> GetByIdAsync(int id){return await _dbSet.FindAsync(id);}public virtual async Task<IEnumerable<T>> GetAllAsync(){return await _dbSet.ToListAsync();}public virtual async Task AddAsync(T entity){await _dbSet.AddAsync(entity);}public virtual void Update(T entity){_dbSet.Update(entity);}public virtual void Delete(T entity){_dbSet.Remove(entity);}
}

🧪 步骤三:创建具体仓储类 UserRepository

public class UserRepository : BaseRepository<User>
{public UserRepository(MyDbContext context) : base(context){}// 可扩展自定义方法public async Task<User?> GetByEmailAsync(string email){return await _dbSet.FirstOrDefaultAsync(u => u.Email == email);}
}

🧩 步骤四:在服务中使用

public class UserService
{private readonly UserRepository _userRepo;public UserService(UserRepository userRepo){_userRepo = userRepo;}public async Task RegisterUser(User user){await _userRepo.AddAsync(user);// 保存到数据库由 UnitOfWork 或 DbContext 控制}
}

✅ 什么时候用接口 vs 抽象类?

特性接口(interface)抽象类(abstract class)
目的定义行为规范定义基本结构和部分实现
支持多继承✅ 支持❌ 不支持
可包含字段❌ 不行✅ 可以
可有构造函数❌ 不行✅ 可以
成员默认类型抽象(abstract)可以是抽象,也可以有默认实现
是否可实例化❌ 不行❌ 不行

仅供学习参考,

http://www.dtcms.com/a/538430.html

相关文章:

  • LeetCode - 无重复字符的最长子串
  • ELK3——kibana
  • 国内购物网站大全濮阳新闻综合频道直播
  • 互联壹佰做企业网站网站快速排名公司
  • 乐清建设网站公司制作一个网站
  • 企业黄页信息查询网seo详细教程
  • 做墙绘一般在哪个网站做医药商城网站的公司吗
  • 广州冼村地铁站几号线网页制作源代码
  • 2025级SYUCT-ACM新生第二次训练 题解
  • 英文网站建设之后怎么推医疗器械分类目录2021
  • 朝阳网站建设 高碑店什么行业最需要网站建设
  • 网站推广优化招聘计算机网络设计是干什么的工作
  • 深圳企业网站制作流程wordpress小工具编辑
  • 曲靖程序网站建设中国教学网站
  • 网站定制开发特点wordpress首页广告位
  • 【Linux】信号的产生,保存,捕捉机制
  • 网站建设详细流程视频温州市手机网站制作多少钱
  • 福州网站怎么做的私活网站开发多少钱
  • 河南做网站的公司有哪些seo公司网站
  • 做asp网站需要的实验报告单做的网站上更改内容改怎么回事
  • 网站建设教程出售用苏州久远网络禹城做网站的
  • 深圳模板网站南通网站开发
  • 网站栏目名称大全用jsp做视频网站
  • 做设计找图有哪些网站有哪些问题企业网站被黑后如何处理
  • Kubernetes入门学习
  • 大模型学习2
  • 【论文学习与撰写】Mathtype的安装与word插件安装
  • 小企业网站建设的基础知识小型企业做网站的价格
  • 怀化本地网站网站如何做免费推广
  • 网站适配怎么做主机如何做服务器建网站