虽然我试图搜索私有构造函数的使用,但我发现它只是在Singleton模式中使用。 除了Singleton模式,使用Private Constructor是什么。 一些链接或代码示例将不胜感激。
答案 0 :(得分:3)
以下是另外两个原因:
工厂模式。
不可变类的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;
}
}
答案 1 :(得分:2)
快速回答:序列化和链式构造函数。
更长的答案:
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; }
}
答案 2 :(得分:0)
我在初始化对象时使用私有构造函数。一个静态搜索(...)函数背面的DataReader - 如果是公共的话,这样的构造函数就没什么意义。