C#开发笔记概述

该文章的最新版本已迁移至个人博客【比特飞】,单击链接 https://www.byteflying.com/archives/957 访问。

我们在很多开源框架中会经常看到protected virtual标记的方法,那么为什么要使用这2个关键字呢?

1、使用protected访问修饰符标记的方法或字段,只能在当前类及其子类中使用,有效的防止了外部无意的更改,使得整个框架可靠性更高;

2、使用virtual标记的方法称为虚方法,虚方法可以由设计人员自行决定是否包含方法的实现,配合protected保护特定的方法并且在其子类中可根据业务需求决定是否重写。

public class Configuration {

    protected virtual void OnConfigure(Setting setting) {
Console.WriteLine("Configuration.OnConfigure");
} public void InitXml() {
OnConfigure(new Setting());
} }

Configuration类包含OnConfigure方法和初始化Xml方法,初始化方法中调用OnConfigure方法,由里氏替换原则可知,运行时子类对象覆盖父类,即Configuration类的子类的OnConfigure方法会被执行。当然,这取决于设计者是否重写OnConfigure方法。

public class XmlConfiguration : Configuration {

    protected override void OnConfigure(Setting setting) {
//base.OnConfigure(setting);
setting.Timeout = 60;
Console.WriteLine($"{setting.PageCount}");
Console.WriteLine("XmlConfiguration.OnConfigure");
} }

继承自Configuration类的XmlConfiguration类并重写OnConfigure方法。在OnConfigure方法中由于父类传递了Setting类型的参数,子类有办法直接访问此处与设置相关的值。本案例更改了超时Timeout并打印出分页PageCount的值。

public class Setting {

    public int Timeout { get; set; } = 30;

    public int PageCount { get; set; } = 20;

}

跟设置有关的类,包含超时时间和分页数量。此处根据实际开发需要决定是否限制setter访问器的使用权限。例如:

public int Timeout { get; private set; } = 30;
public class Program {

    public static void Main(string[] args) {

        Configuration configuration = new XmlConfiguration();
configuration.InitXml(); Console.ReadKey();
} }

以上是调用方的代码示例,以下是这个案例的输出结果:

该文章的最新版本已迁移至个人博客【比特飞】,单击链接 https://www.byteflying.com/archives/957 访问。

20
XmlConfiguration.OnConfigure
Hello World!

protected和virtual联合使用,配合注入容器,会给大型项目带来巨大便利的同时提高了可靠性。

最新文章

  1. “前.NET Core时代”如何实现跨平台代码重用 ——程序集重用
  2. 《连载 | 物联网框架ServerSuperIO教程》- 14.配制工具介绍,以及设备驱动、视图驱动、服务实例的挂载
  3. ios开发中遇到的编译错误总结
  4. 重新注册iis的.NET Framework版本
  5. Git 远程操作详解
  6. JavaScript中对于闭包的理解
  7. nginx 配置.json文件直接访问
  8. ANT编译build.xml
  9. Swift 中的利刃,函数和闭包
  10. mobile响应式页面meta信息相关记录
  11. SQL Server 查询分析器提供的所有键盘快捷方式(转)
  12. SCSS loader effect
  13. C# winform线程的使用 制作提醒休息小程序(长时间计算机工作者必备)
  14. [ES6] Objects create-shorthand && Destructuring
  15. php使用PDO方法详解
  16. 从一个App跳转到另一个App
  17. OpenGL———混合的基本知识
  18. Python 基础 四 面向对象杂谈
  19. PL/SQL Developer使用技巧以及快捷键设置
  20. python标准库之operator(运算符模块)

热门文章

  1. 【python大牛分享】python——接口自动化测试框架环境的使用
  2. /dev/mapper/VolGroup00-LogVol00 满了,根目录存储垃圾文件导致磁盘满了
  3. JAVA各种OOM代码样例及解决方法
  4. OKex平台如何使用谷歌身份验证?
  5. 基于Python爬虫采集天气网实时信息
  6. Java7/8 中的 HashMap 和 ConcurrentHashMap
  7. vue学习(四) v-on:事件绑定
  8. SpringBoot-使用lombok插件运行报错
  9. [转载]android网络通信解析
  10. 12天,这本《重学Java设计模式》PDF书籍下载量9k,新增粉丝1400人,Github上全球推荐榜!