第二回 基类的架造方法应该为子类想的多一些

简介:

C#允许一个类不去手动声明一个构造方法,因为.net内部为我们继承了它,它为自己为我们生成一个无参的架造方法,本文中我们讲的架造方法都属于实例构造方法,下面我们来说明几个问题:
1 构造方法在何时执行

2 基类的构造方法应该去子类考虑的多一些

首先我们来说一下第一个问题,构造方法的执行时期,当类对象被new时,它会首先执行符合它(类)方法签名的构造方法,如这个语句

Person person=new Person();

这是我们经常看到的建立对象的语句,它事实上是去执行Person类型的public Person()这个方法的,当然,如果语句变成了

Person person=new Person("zzl","male");

那么,它要被执行的构造方法就变成了public Person(string name,string gander);

而这两个方法的不同点就是方法签名上,方法2允许在建立对象时同时指定对象的两个属性,而方法1则另外再对属性赋值,很显然方法2对象程序员来说,更友好。

OK,下面我们再来说一下”基类的构造方法应该去子类考虑的多一些”这个话题,其实在我上一讲中已经把代码粘贴上了,大家应该已经注意到了。

考虑的多一些,这个意思是说,尽量让子类可以更清晰,更简洁的去使用基类的属性和方法等,在很多情况下,基类会向子类公开一些属性,而这些属性的创建很多时候是由子类决定的,所以基类应该保留友好的赋值接口。

下面代码请看:

            /// <summary>
  7         /// 数据访问对象(只对子类可见)
  8         /// </summary>
  9         protected DataContext DB;
 10 
 11         #region Constructors
 12         public DataBase()
 13             : this(new LINQ.DataClasses1DataContext(System.Configuration.ConfigurationManager.ConnectionStrings["XXB"].ToString()))
 14         { }
 15         public DataBase(DataContext db)
 16             : this(() => { return db; })
 17         { }
 18         public DataBase(Func<DataContext> func)
 19         {
 20             this.DB = func();
 21         }
 22         #endregion

事实上,它就是上一讲的代码片断,它向子类公开的DB这个属性,而DB的创建于子类决定,所以在基类构造方法中有3个重载,它在不同时候对子类有不同的使用,如

public DataBase(Func<DataContext> func),它允许子类为基类传递一个Func委托人方法,这使得程序的灵活度提高了不少

本文转自博客园张占岭(仓储大叔)的博客,原文链接:第二回 基类的架造方法应该为子类想的多一些,如需转载请自行联系原博主。

目录
相关文章
|
小程序 前端开发 算法
小程序实现个人支付功能
1.小程序的支付功能一直有人咨询 2.以前一直以为个人开发者是不可以使用支付功能的 3.但是微信自己有个骚操作 ,所以个人也可以使用小程序功能 4.下面介绍
1975 0
小程序实现个人支付功能
|
12月前
|
数据采集 安全 大数据
“点数成金”时代,如何应用全域数据资产治理释放企业数据价值?【瓴羊Dataphin在信通院2024数据资产管理大会】
在“点数成金”时代,企业数据成为宝贵资产。12月18-19日,信通院“2024数据资产管理大会”在京举办,瓴羊政企金融事业部总监徐宁分享了Dataphin在数据治理领域的创新方法论与实践经验,强调数据资产双循环和元数据管理的重要性。瓴羊副总裁王赛获颁数据资产管理专家证书。
295 16
|
前端开发 Android开发 iOS开发
探索Android与iOS的跨平台开发策略
在移动应用开发的多元化时代,跨平台开发已成为开发者追求效率和广泛覆盖的重要手段。本文深入探讨了Android与iOS两大主流平台下的跨平台开发策略,分析了各自的优势与挑战,并通过实际案例展示了如何有效实施跨平台解决方案,以期为开发者提供有价值的参考和启示。
|
存储 IDE 开发工具
磁盘的物理组成
本文介绍了磁盘的物理组成和如何新增磁盘。磁盘主要由主轴、磁盘盘、磁头和磁头臂组成,其中磁道、簇、扇面和扇区是磁盘的基本存储单元。新增磁盘的步骤包括关闭操作系统、选择磁盘类型和容量、创建新虚拟磁盘并完成配置。常见的磁盘接口类型有IDE、SCSI、SATA和SAS。
446 1
|
消息中间件 编解码 开发者
深入解析 Flutter兼容鸿蒙next全体生态的横竖屏适配与多屏协作兼容架构
本文深入探讨了 Flutter 在屏幕适配、横竖屏切换及多屏协作方面的兼容架构。介绍了 Flutter 的响应式布局、逻辑像素、方向感知、LayoutBuilder 等工具,以及如何通过 StreamBuilder 和 Provider 实现多屏数据同步。结合实际应用场景,如移动办公和教育应用,展示了 Flutter 的强大功能和灵活性。
490 6
|
数据采集 人工智能 数据可视化
【2023年电工杯竞赛】B题 人工智能对大学生学习影响的评价 数学建模方案和python代码
本文介绍了2023年电工杯竞赛B题的数学建模方案和Python代码实现,详细阐述了如何分析调查问卷数据,建立评价指标体系,构建数学模型评估人工智能对大学生学习的影响,并提供了数据预处理、特征编码、可视化分析等代码示例。
514 0
【2023年电工杯竞赛】B题 人工智能对大学生学习影响的评价 数学建模方案和python代码
|
关系型数据库 MySQL 数据库
mysql锁详解
通过理解并合理运用MySQL中的锁机制,开发者可以有效管理数据库并发访问,平衡性能与数据一致性需求。更多关于MySQL锁的深入探讨和最佳实践,请参考专业的数据库管理资源[[深入MySQL锁机制详解
242 0
|
设计模式 Java 中间件
静态代理和动态代理的区别以及实现过程
这篇文章通过示例代码讲解了静态代理和动态代理在Java中的使用方式和区别,重点介绍了动态代理的实现原理及其在Spring框架中的应用。
静态代理和动态代理的区别以及实现过程
|
JavaScript 前端开发 程序员
Vue学习之--------Vue生命周期beforeCreate、created、beforeMount、mounted、beforeDestroy 。。。(图解详细过程)(2022/7/17)
这篇文章详细介绍了Vue的生命周期和各个阶段的钩子函数,包括`beforeCreate`、`created`、`beforeMount`、`mounted`、`beforeUpdate`、`updated`、`beforeDestroy`和`destroyed`。文章通过图解、方法说明、代码实例和测试效果,阐述了每个钩子函数的作用和使用场景,帮助读者深入理解Vue实例从创建到销毁的整个过程。
Vue学习之--------Vue生命周期beforeCreate、created、beforeMount、mounted、beforeDestroy 。。。(图解详细过程)(2022/7/17)
|
算法 数据库连接 数据库
魔鬼数字的起源与在编程中的警示作用
魔鬼数字的起源与在编程中的警示作用

热门文章

最新文章