Campos (Guía de programación de C#)

Un campo es una variable de cualquier tipo que se declara directamente en una clase o struct.Los campos son miembros de su tipo contenedor.

Una clase o struct puede tener campos de instancia, campos estáticos o ambos.Los campos de instancia son específicos de una instancia de un tipo.Si tiene una clase T, con un campo de instancia F, puede crear dos objetos de tipo T y modificar el valor de F en cada objeto sin afectar al valor del otro objeto.Por el contrario, un campo estático pertenece a la propia clase y se comparte entre todas las instancias de dicha clase.Los cambios realizados en la instancia A serán inmediatamente visibles en las instancias B y C si tienen acceso al campo.

Por regla general, solo debe utilizar campos para variables con accesibilidad privada o protegida.Los datos que la clase expone al código de cliente se deben proporcionar a través de métodos, propiedades e indizadores.Si se utilizan estas construcciones para el acceso indirecto a campos internos, se establece una protección ante valores de entrada no válidos.Un campo privado que almacena los datos expuestos por una propiedad pública se denomina memoria auxiliar o campo de respaldo.

Habitualmente los campos almacenan los datos a los que deben tener acceso más de un método de clase y que se deben almacenar durante más tiempo que el período de duración de un único método.Por ejemplo, una clase que representa una fecha del calendario podría tener tres campos enteros: uno para el mes, otro para el día y un tercero para el año.Las variables que no se utilizan fuera del ámbito de un único método se deben declarar como variables locales dentro del propio cuerpo del método.

Los campos se declaran en el bloque de clase especificando el nivel de acceso del campo, seguido por el tipo de campo y después por el nombre del mismo.Por ejemplo:

public class CalendarEntry
{
    // private field
    private DateTime date;

    // public field (Generally not recommended.)
    public string day;

    // Public property exposes date field safely.
    public DateTime Date 
    {
        get 
        {
            return date;
        }
        set 
        {
            // Set some reasonable boundaries for likely birth dates.
            if (value.Year > 1900 && value.Year <= DateTime.Today.Year)
            {
                date = value;
            }
            else
                throw new ArgumentOutOfRangeException();
        }

    }

    // Public method also exposes date field safely.
    // Example call: birthday.SetDate("1975, 6, 30");
    public void SetDate(string dateString)
    {
        DateTime dt = Convert.ToDateTime(dateString);

        // Set some reasonable boundaries for likely birth dates.
        if (dt.Year > 1900 && dt.Year <= DateTime.Today.Year)
        {
            date = dt;
        }
        else
            throw new ArgumentOutOfRangeException();
    }

    public TimeSpan GetTimeSpan(string dateString)
    {
        DateTime dt = Convert.ToDateTime(dateString);

        if (dt != null && dt.Ticks < date.Ticks)
        {
            return date - dt;
        }
        else
            throw new ArgumentOutOfRangeException();  

    }
}

Para obtener acceso a un campo en un objeto, agregue un punto después del nombre de objeto, seguido del nombre del campo, como en objectname.fieldname.Por ejemplo:

CalendarEntry birthday = new CalendarEntry();
birthday.day = "Saturday";

Se puede proporcionar un valor inicial a un campo utilizando el operador de asignación cuando se declara el campo.Para asignar automáticamente al campo day el valor "Monday", por ejemplo, declararía day como en el ejemplo siguiente:

public class CalendarDateWithInitialization
{
    public string day = "Monday";
    //...
}

Los campos se inicializan inmediatamente antes de llamar al constructor para la instancia de objeto.Si el constructor asigna el valor de un campo, sobrescribirá cualquier valor dado durante la declaración del campo.Para obtener más información, vea Utilizar constructores (Guía de programación de C#).

[!NOTA]

Un inicializador de campo no puede hacer referencia a campos de otra instancia.

Los campos se pueden marcar como public, private, protected, internal o protected internal.Estos modificadores de acceso definen cómo pueden tener acceso a los campos los usuarios de la clase.Para obtener más información, vea Modificadores de acceso (Guía de programación de C#).

Un campo puede declararse de forma opcional como static.Esto hace que el campo esté siempre disponible para los llamadores, aunque no exista ninguna instancia de la clase.Para obtener más información, vea Clases estáticas y sus miembros (Guía de programación de C#).

Un campo puede declararse como readonly.Solo es posible asignar un valor a un campo de tipo readonly durante la inicialización o en un constructor.Un campo staticreadonly es muy similar a una constante, excepto en que el compilador de C# no tiene acceso a él en tiempo de compilación, solo en tiempo de ejecución.Para obtener más información, vea Constantes (Guía de programación de C#).

Especificación del lenguaje C#

Para obtener más información, vea la Especificación del lenguaje C#. La especificación del lenguaje es la fuente definitiva de la sintaxis y el uso de C#.

Vea también

Referencia

Clases y structs (Guía de programación de C#)

Utilizar constructores (Guía de programación de C#)

Herencia (Guía de programación de C#)

Modificadores de acceso (Guía de programación de C#)

Clases y miembros de clase abstractos y sellados (Guía de programación de C#)

Conceptos

Guía de programación de C#