fábrica
constructores privados pueden ser útiles cuando se utiliza un patrón de fábrica (en otras palabras, una función estática que se utiliza para obtener una instancia de la clase en lugar de instancias explícita).
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;
}
}
Pseudo-Sellado con anidada niños
Cualquier clases anidadas que heredan de la clase externa puede acceder al constructor privado.
Por ejemplo, puede utilizar esto para crear una clase abstracta que que puede heredar de, pero nadie más (un constructor de internal
también funcionaría aquí para restringir la herencia de un solo conjunto, pero los private
fuerzas constructor de todo implementaciones sean clases anidadas.)
public abstract class BaseClass
{
private BaseClass() { }
public class SubClass1 : BaseClass
{
public SubClass1() : base() { }
}
public class SubClass2 : BaseClass
{
public SubClass2() : base() { }
}
}
Base Constructor
también pueden ser utilizados para crear "base" constructores que se llaman desde diferente, más acce constructores posibles.
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) { }
}
Me gusta la asignación dentro de la declaración de agregar caché, he utilizado esa sintaxis para las propiedades cargadas de forma perezosa con el operador nulo coalescente que no se me ocurrió antes de que pueda ser utilizado igualmente en los métodos regulares antes de ahora. –
Adam-muchas gracias, tiene sentido ahora !!!! –
¿El primer ejemplo parece ser un ejemplo de SingletonFactory? –