
文章目录
概述
我们在很多开源框架中会经常看到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(); } }
以上是调用方的代码示例,以下是这个案例的输出结果:
20 XmlConfiguration.OnConfigure Hello World!
protected和virtual联合使用,配合注入容器,会给大型项目带来巨大便利的同时提高了可靠性。
本文由 .Net中文网 原创发布,欢迎大家踊跃转载。
转载请注明本文地址:https://www.byteflying.com/archives/957。