第二回 基类的架造方法应该为子类想的多一些
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委托人方法,这使得程序的灵活度提高了不少。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
2011-08-04 不忘本~抽象类,抽象方法,虚方法
2011-08-04 asp.net中对URL的一些操作