una que parametros parametrizado opcionales objetos objeto metodos instancia inicializar inicializacion clases c# parameters constructor lazy-evaluation

c# - que - Pasa los parámetros al constructor, al inicializar una instancia perezosa



que es inicializacion de objetos (3)

Lazy tiene dos formas de inicializar. El primero es usar el ctor predeterminado de T (sin parámetros)

el segundo es aceptar un Func que tiene lógica de inicialización del cliente. Deberías usar la segunda sobrecarga como se menciona aquí.

http://msdn.microsoft.com/en-us/library/dd642329.aspx

public class myClass { public myClass(String InstanceName) { Name = InstanceName; } public String Name { get; set; } } // Now using myClass lazily I have: Lazy<myClass> myLazy; Console.WriteLine(myLazy.Value.Name);

Mi pregunta es ¿cómo pasar InstanceName a myClass constructor cuando estamos usando una instancia perezosa?


No puedes, Lazy<T> requiere un constructor sin parámetros. Sin embargo, podría usar el constructor Lazy<T>(Func<T>) , con un método que inicialice la clase.


Prueba esto:

Lazy<myClass> myLazy = new Lazy<myClass>(() => new myClass(InstanceName));

Recuerde que la expresión se evalúa perezosamente, por lo que si cambia el valor de la variable InstanceName antes de llamar al constructor, es posible que no haga lo que espera.