private 和 protected 构造函数详解
实现单例模式的时候经常要把构造函数标记为private 和protected以防止外部直接通过new操作符 构造一个新的实例
众所周知 private 和protected的主要区别就是 后者允许子类调用被标记为protected的方法
另外一个常识: 使用new操作符构造一个子类的过程中 .net会先构造一个父类出来 ,如此递归 直到object对象
那么也就是说 标记为protected的时候 实际上还是可以通过继承的方式间接的构造父类对象
代码如下: (new classb的同时也间接的new classa了)
public class classa
{
protected classa()
{
}
}
public class classb : classa
{
public classb()
{
}
}
private则没有这个问题, 但是! 标记为private以后实际上也就意味着没有类型可以继承private了
当然你可以编写如下代码: (但是编辑器会告诉你 'classa.classa()' is inaccessible due to its protection level)
public class classa
{
private classa()
{
}
}
public class classb : classa
{
public classb()
{
}
}
原因就是构造classb的时候没法调用classa的构造函数
从开发角度讲,如果一个类设计的时候就不想被继承或者不能被继承,那么应该标记为sealed , 以防止别人不小心继承了这个类,那么这里的classa应该被标记为密封的
那么如果是为了单例模式 private是一个比较好的选择, 密封类并protected也是一个可以使用的实现
有的时候屏蔽构造函数并不是想使用单例模式 ,而且想通过这种方式规范调用方的行为
代码如下:
public class classa
{
protected classa()
{
}
public classa create()
{
//这里可以做特殊操作 例如给classa的属性赋初始值,或者写点日志什么的,反正你爱干嘛干嘛
return new classa();
}
}
茶杯头甜蜜终章dlc 官方手机版v1.0.0.3
下载火柴人传说暗影格斗内置菜单 最新版v3.0.1
下载荒野乱斗测试服 安卓版v61.10.3
下载荒野乱斗彩虹服 安卓版v61.10.3
下载寒霜启示录 安卓版v1.25.10
寒霜启示录是一款生存模拟游戏,不少玩家可能对于末日都有着自己
末日城堡免广告版 安卓最新版v0.7.1
末日城堡免广告版是一款非常好玩的模拟经营类游戏,内部可以不看
甜蜜人生模拟器 最新版v1.4.5
甜蜜人生模拟器是一款非常好玩的模拟恋爱手游,玩家在这里能够对
武器锻造师内置功能菜单 v10.4
武器锻造师内置菜单版是游戏的破解版本,在该版本中为玩家提供了
开放空间overfield 安卓版v1.0.5
开放空间Overfield是一款箱庭养成经营手游,让你在广阔