除单例模式之外的任何其他私有构造函数的使用
本文关键字:构造函数 任何 单例模式 其他 | 更新日期: 2023-09-27 18:05:23
当我试图搜索私有构造函数的使用时,我发现的只是它在单例模式中的使用。除了单例模式,还有什么是私有构造函数。一些链接或代码示例将不胜感激。
还有两个原因:
Factory Pattern.
- 使用私有构造函数和公共静态方法调用它们。
不可变类的Builder模式。
- 使用一个嵌套的可变Builder类,它的一个实例被传递给一个私有构造函数。
示例生成器模式:
using System;
namespace Demo
{
public static class Program
{
public static void Main(string[] args)
{
var demo = new ImmutableClass.Builder{
A = 1,
B = "two",
C = 3.0
}.Build();
}
}
public sealed class ImmutableClass
{
public sealed class Builder
{
public int A;
public string B;
public double C;
public ImmutableClass Build()
{
return new ImmutableClass(this);
}
}
private ImmutableClass(Builder builder)
{
_a = builder.A;
_b = builder.B;
_c = builder.C;
}
public int A
{
get
{
return _a;
}
}
public string B
{
get
{
return _b;
}
}
public double C
{
get
{
return _c;
}
}
private readonly int _a;
private readonly string _b;
private readonly double _c;
}
}
快速回答:序列化和链式构造函数。
较长的回答:
需要初始化值的对象的序列化
public class SomeSerializableClass {
private SomeSerializableClass() {} // Used only in serialization
public SomeSerializableClass(int initParameter){
this.Property = initParameter;
}
public int Property { get; set; }
}
public class Program{
static void Main(){
var obj1 = new SomeSerializableClass(42); // valid
var obj2 = new SomeSerializableClass(); // invalid
var xs = new XmlSerializer(typeof(SomeSerializableClass));
var obj3 = (SomeSerializableClass)xs.Deserialize(someStream); // possible
}
}
链式构造函数(分解一些构造函数逻辑):
public class SomeClass {
private SomeClass(int initParameter) {
this.Property = initParameter; // Will always be executed, the logic exists once
}
public SomeSerializableClass(int initParameter, string otherParameter)
: this(initParameter)
{
}
public SomeSerializableClass(int initParameter, int againAntherParameter)
: this(initParameter)
{
}
public int Property { get; set; }
}
当从静态Search(…)函数后面的DataReader初始化对象时,我使用私有构造函数-如果是公共的,这样的构造函数没有什么意义。