当我试图搜索私有构造函数的使用时,我发现的只是它在单例模式中的使用。除了单例模式之外,私有构造函数还有什么用处。一些链接或代码示例将不胜感激。
3 回答
            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;
    }
}
    于 2013-03-22T13:21:24.040   回答
    
    
            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; }
}
    于 2013-03-22T13:23:32.023   回答
    
    
            0        
        
		
在从静态 Search(...) 函数后面的 DataReader 初始化对象时,我使用私有构造函数 - 如果是公共的,这样的构造函数就没有什么意义了。
于 2013-03-22T13:20:49.373   回答