завод
Частные конструкторы могут быть полезны при использовании шаблона заводскую (другими словами, статическую функцию, которая используется для получения экземпляра класса, а не явного экземпляра).
public class MyClass
{
private static Dictionary<object, MyClass> cache =
new Dictionary<object, MyClass>();
private MyClass() { }
public static MyClass GetInstance(object data)
{
MyClass output;
if(!cache.TryGetValue(data, out output))
cache.Add(data, output = new MyClass());
return output;
}
}
Псевдо-Sealed с вложенными Детьми
Любых вложенных классов, наследуемыми от внешнего класса может получить доступ к закрытому конструктору.
Например, вы можете использовать это, чтобы создать абстрактный класс, который вы может наследовать, но ни один другой (internal
конструктор не будет работать здесь, чтобы ограничить наследование одной сборки, но private
конструктор силы все реализации быть вложенными классами.)
public abstract class BaseClass
{
private BaseClass() { }
public class SubClass1 : BaseClass
{
public SubClass1() : base() { }
}
public class SubClass2 : BaseClass
{
public SubClass2() : base() { }
}
}
Base Конструктор
Они также могут быть использованы для создания «базовых» конструкторы, которые вызываются из разных, больше ACCE ssible конструкторы.
public class MyClass
{
private MyClass(object data1, string data2) { }
public MyClass(object data1) : this(data1, null) { }
public MyClass(string data2) : this(null, data2) { }
public MyClass() : this(null, null) { }
}
Мне нравится назначение внутри оператора добавления кеша, я использовал этот синтаксис для лениво загружаемых свойств с помощью оператора нулевой коалесценции, который мне не приходил, прежде чем он будет использоваться в обычных методах до сих пор. –
Adam-thank u так много, это имеет смысл сейчас !!!! –
Первый пример - пример SingletonFactory? –