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

Actualización: Julio de 2008

Una clase es una construcción que permite crear tipos personalizados propios mediante la agrupación de variables de otros tipos, métodos y eventos. Una clase es como un plano. Define los datos y el comportamiento de un tipo. Si la clase no se declara como estática, el código de cliente puede utilizarla mediante la creación de objetos o instancias que se asignan a una variable. La variable permanece en memoria hasta todas las referencias a ella están fuera del ámbito. En ese momento, CLR la marca como apta para la recolección de elementos no utilizados. Si la clase se declara como estática, solo existe una copia en memoria y el código de cliente solo puede tener acceso a ella a través de la propia clase y no de una variable de instancia. Para obtener más información, vea Clases estáticas y sus miembros (Guía de programación de C#).

A diferencia de las estructuras, las clases admiten la herencia, una característica fundamental de la programación orientada a objetos. Para obtener más información, vea Herencia (Guía de programación de C#).

Declarar clases

Las clases se declaran mediante la palabra clave class, tal como se muestra en el ejemplo siguiente:

public class Customer
{
    //Fields, properties, methods and events go here...
}

El nivel de acceso precede a la palabra clave class. Como, en este caso, se utiliza public, cualquiera puede crear objetos a partir de esta clase. El nombre de la clase sigue a la palabra clave class. El resto de la definición es el cuerpo de clase, donde se definen el comportamiento y los datos. Los campos, propiedades, métodos y eventos de una clase se conocen colectivamente como miembros de clase.

Crear objetos

Aunque se utilizan a veces de forma intercambiable, una clase y un objeto son cosas diferentes. Una clase define un tipo de objeto, pero no es propiamente un objeto. Un objeto es una entidad concreta basada en una clase y, a veces, se denomina instancia de una clase.

Los objetos se pueden crear con la palabra clave new seguida del nombre de la clase en la que se basará el objeto, de la manera siguiente:

Customer object1 = new Customer();

Cuando se crea una instancia de una clase, una referencia al objeto se vuelve a pasar al programador. En el ejemplo anterior, object1 es una referencia a un objeto basado en Customer. Esta referencia apunta al nuevo objeto, pero no contiene los datos del objeto. De hecho, se puede crear una referencia a objeto sin crear un objeto:

Customer object2;

No se recomienda crear este tipo de referencias que realmente no apuntan a un objeto existente, ya que al intentar el acceso a un objeto a través de esa referencia se producirá un error en tiempo de ejecución. No obstante, este tipo de referencia se puede crear para hacer referencia a un objeto, ya sea creando un nuevo objeto o asignándola a un objeto existente, de la forma siguiente:

Customer object3 = new Customer();
Customer object4 = object3;

Este código crea dos referencias a objeto que se refieren al mismo objeto. Por consiguiente, los cambios realizados en el objeto a través de object3 se reflejarán en los usos posteriores de object4. Puesto que el acceso a los objetos basados en clases se realiza por referencia, las clases se denominan tipos por referencia.

Herencia de clase

La herencia se realiza a través de una derivación, lo que significa que una clase se declara utilizando una clase base de la cual hereda los datos y el comportamiento. Una clase base se especifica anexando dos puntos y el nombre de la clase base a continuación del nombre de la clase derivada, del modo siguiente:

public class Manager : Employee
{
    // Employee fields, properties, methods and events are inherited
    // New Manager fields, properties, methods and events go here...
}

Cuando una clase declara una clase base, hereda todos los miembros de la clase base excepto los constructores.

A diferencia de C++, una clase en C# solo puede heredar directamente de una clase base. Sin embargo, dado que una clase base puede heredar de otra clase, una clase puede heredar indirectamente de varias clases base. Además, una clase puede implementar directamente más de una interfaz. Para obtener más información, vea Interfaces (Guía de programación de C#).

Una clase se puede declarar como abstracta. Una clase abstracta contiene métodos abstractos que incluyen una definición de firma pero ninguna implementación. No se pueden crear instancias de las clases abstractas. Solo se pueden utilizar a través de clases derivadas que implementan los métodos abstractos. Por el contrario, una clase sellada no permite que otras clases deriven de ella. Para obtener más información, vea Clases y miembros de clase abstractos y sellados (Guía de programación de C#).

Las definiciones de clase se pueden dividir entre archivos de código fuente diferentes. Para obtener más información, vea Clases y métodos parciales (Guía de programación de C#).

Descripción

En el ejemplo siguiente, se define una clase pública que contiene un campo único, un método y un método especial denominado constructor. Para obtener más información, vea Constructores (Guía de programación de C#). Luego se crean instancias de la clase con la palabra clave new.

Ejemplo

public class Person
{
    // Field
    public string name;

    // Constructor
    public Person()
    {
        name = "unknown";
    }

    // Method
    public void SetName(string newName)
    {
        name = newName;
    }
}
class TestPerson
{
    static void Main()
    {
        Person person = new Person();
        Console.WriteLine(person.name);

        person.SetName("John Smith");
        Console.WriteLine(person.name);

        // Keep the console window open in debug mode.
        Console.WriteLine("Press any key to exit.");
        Console.ReadKey();
    }
}
/* Output:
    unknown
    John Smith
*/

Especificación del lenguaje C#

Para obtener más información, vea las secciones siguientes de Especificación del lenguaje C#.

  • 1.6 Clases y objetos

  • 10 Clases

Vea también

Conceptos

Guía de programación de C#

Referencia

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

Métodos (Guía de programación de C#)

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

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

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

Historial de cambios

Fecha

Historial

Motivo

Julio de 2008

Se ha quitado una declaración equívoca sobre el acceso base.