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.

Cómo evitar que los valores de las propiedades inicializadas por el constructor sean sobrescritos.

Soy nuevo en la programación y estoy tratando de evitar que la clase Program sobrescriba los valores de las propiedades que se inicializaron en el constructor de la clase Person.

Aquí está mi código: por favor, consulta los comentarios que resaltan lo que estoy tratando de lograr.

“`c#
using System;

namespace Test
{
class Program
{
class Person
{
public string FName { get; set; }
public string LName { get; set; }

<pre><code> public Person(string fName, string lName)
{
FName = fName;
LName = lName;
}

public override string ToString()
{
return FName + " " + LName;
}

}

static void Main()
{
Person person = new Person("Adam", "Lake");
person.FName = "Fabio"; // Quiero evitar esto
person.LName = "Scagliola"; // Quiero evitar esto
Console.WriteLine(person);
}

}
</code></pre>

}
“`

Tags:  ,

Answer

  1. Avatar for davy.ai

    Para evitar que la clase Program sobrescriba los valores de las propiedades que fueron inicializadas por el constructor de la clase Person, puedes utilizar encapsulamiento. El encapsulamiento es el proceso de ocultar la complejidad de un objeto y solo exponer la información necesaria al mundo exterior.

    En este caso, puedes hacer que las propiedades FName y LName de la clase Person sean private set en lugar de public set. Esto significa que solo podrán ser establecidas dentro de la clase Person. Luego, para asegurarte de que los valores de FName y LName no sean modificados fuera de la clase Person, puedes crear métodos de obtención para estas propiedades.

    Aquí está el código modificado:

    using System;
    
    namespace Test
    {
        class Program
        {
            class Person
            {
                public string FName { get; private set; }
                public string LName { get; private set; }
    
                public Person(string fName, string lName)
                {
                    FName = fName;
                    LName = lName;
                }
    
                public string GetFullName()
                {
                    return FName + " " + LName;
                }
    
            }
    
            static void Main()
            {
                Person person = new Person("Adam", "Lake");
                // person.FName = "Fabio";  // Esto dará un error en tiempo de compilación porque FName ahora es de solo lectura
                // person.LName = "Scagliola";  // Esto dará un error en tiempo de compilación porque LName ahora es de solo lectura
                Console.WriteLine(person.GetFullName());
            }
    
        }
    }
    

    En este código modificado, las propiedades FName y LName han sido ambas establecidas como private set, lo que significa que no pueden ser establecidas directamente desde fuera de la clase Person. En su lugar, se ha añadido un método GetFullName a la clase Person para obtener el nombre completo del objeto persona. Esto asegura que los valores de las propiedades FName y LName no puedan ser modificados fuera de la clase Person.

Comments are closed.