es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Inicialización de propiedad y ‘this’ La inicialización de propiedad se refiere al proceso de asignar un valor inicial a una propiedad en un objeto o clase. En los documentos de IT, este concepto se utiliza para describir cómo se configuran las propiedades de un objeto o clase en un programa de computadora. El término ‘this’ se refiere a una palabra clave en muchos lenguajes de programación que se utiliza para hacer referencia al objeto actual en el que se encuentra el código. En el contexto de la inicialización de propiedad, ‘this’ se usa para acceder y asignar valores a las propiedades de un objeto o clase. Traducción: Inicialización de propiedad y ‘this’ La inicialización de propiedad se refiere al proceso de asignar un valor inicial a una propiedad en un objeto o clase. En los documentos de IT, este concepto se utiliza para describir cómo se configuran las propiedades de un objeto o clase en un programa de computadora. El término ‘this’ se refiere a una palabra clave en muchos lenguajes de programación que se utiliza para hacer referencia al objeto actual en el que se encuentra el código. En el contexto de la inicialización de propiedad, ‘this’ se usa para acceder y asignar valores a las propiedades de un objeto o clase.

Me preguntaba si puedo inicializar una propiedad (tipo de referencia) (cuando su valor es null) usando una referencia a la palabra clave this, pero sin utilizar el constructor.
En algunos casos no quiero usar el constructor para inicializar la propiedad, así que si nadie la accede, su valor no será creado.
Además, no me gusta separar la declaración de la propiedad de su inicialización en el constructor, si es posible.

Un ejemplo típico es la declaración de un comando para la programación de patrones MVVM:

private Command FAddRecordCommand = null;
public Command AddRecordCommand
{
    get
    {
        if (this.FAddRecordCommand == null)
        {
            this.FAddRecordCommand = new Command(this.AddRecordCommandExecute);
        }
        return this.FAddRecordCommand;
    }
}

private async void AddRecordCommandExecute()
{
    //hacer algo
}

No me gusta escribir tres veces el nombre del miembro FAddRecordCommand

Intenté con propiedades de implementación automática, pero la palabra clave this no es accesible en la inicialización:

public Command AddRecordCommand { get; } = new Command(this.AddRecordCommandExecute);

El compilador muestra el error: La palabra clave ‘this’ no está disponible en el contexto actual

¿Existe alguna forma de usar la declaración de una sola línea como lo permiten las propiedades de implementación automática, pero haciendo uso de this?

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Desafortunadamente, no es posible utilizar la palabra clave this para inicializar una propiedad sin utilizar el constructor. Como has descubierto, la palabra clave this no es accesible en los inicializadores de propiedades.

    Una solución alternativa para evitar tener que acceder al nombre de la propiedad varias veces en el constructor es utilizar un método privado de inicialización, como este:

    private Command _addRecordCommand;
    private Command AddRecordCommandInitializer()
    {
        return new Command(AddRecordCommandExecute);
    }
    
    public Command AddRecordCommand
    {
        get { return _addRecordCommand ?? (_addRecordCommand = AddRecordCommandInitializer()); }
    }
    

    De esta manera, puedes mantener la inicialización de la propiedad separada de la declaración, al mismo tiempo que evitas código adicional en el constructor.

    Alternativamente, podrías considerar utilizar un contenedor de inyección de dependencias para administrar la creación de tus objetos, lo cual puede ayudar a reducir la necesidad de inicialización retrasada o lógica de inicialización de propiedades compleja, especialmente en proyectos más grandes.

Comments are closed.