class (Referencia de C#)

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

class TestClass
{
    // Methods, properties, fields, events, delegates
    // and nested classes go here.
}

Comentarios

Solo la herencia simple se permite en C#. En otras palabras, una clase puede heredar la implementación solo de una clase base. En cambio, una clase puede implementar más de una interfaz. En la tabla siguiente se muestran ejemplos de herencia de clases e implementación de interfaces:

Herencia Ejemplo
None class ClassA { }
Single class DerivedClass : BaseClass { }
Ninguna, implementa dos interfaces class ImplClass : IFace1, IFace2 { }
Única, implementa una interfaz class ImplDerivedClass : BaseClass, IFace1 { }

Las clases que se declaran directamente dentro de un espacio de nombres, que no están anidadas dentro de otras clases, pueden ser de tipo public o internal. De forma predeterminada, las clases son internal.

Los miembros de clase, incluidas las clases anidadas, pueden ser public, protected internal, protected, internal, private o private protected. De forma predeterminada, los miembros son private.

Para obtener más información, consulte Modificadores de acceso.

Puede declarar clases genéricas que tengan parámetros de tipo. Para obtener más información, consulte Clases genéricas.

Una clase puede contener declaraciones de los miembros siguientes:

Ejemplo

En el ejemplo siguiente se muestra cómo declarar campos de clase, constructores y métodos. También se muestra la creación de instancias de objeto y la impresión de datos de instancias. En este ejemplo, se declaran dos clases. La primera clase, Child, contiene dos campos privados (name y age), dos constructores públicos y un método público. La segunda clase, StringTest, se usa para contener Main.

class Child
{
    private int age;
    private string name;

    // Default constructor:
    public Child()
    {
        name = "N/A";
    }

    // Constructor:
    public Child(string name, int age)
    {
        this.name = name;
        this.age = age;
    }

    // Printing method:
    public void PrintChild()
    {
        Console.WriteLine("{0}, {1} years old.", name, age);
    }
}

class StringTest
{
    static void Main()
    {
        // Create objects by using the new operator:
        Child child1 = new Child("Craig", 11);
        Child child2 = new Child("Sally", 10);

        // Create an object using the default constructor:
        Child child3 = new Child();

        // Display results:
        Console.Write("Child #1: ");
        child1.PrintChild();
        Console.Write("Child #2: ");
        child2.PrintChild();
        Console.Write("Child #3: ");
        child3.PrintChild();
    }
}
/* Output:
    Child #1: Craig, 11 years old.
    Child #2: Sally, 10 years old.
    Child #3: N/A, 0 years old.
*/

Comentarios

Observe que en el ejemplo anterior solo se puede acceder a los campos privados (name y age) a través del método público de la clase Child. Por ejemplo, no puede imprimir el nombre de la clase child, desde el método Main, mediante una instrucción como esta:

Console.Write(child1.name);   // Error

El acceso a miembros privados de Child desde Main solo sería posible si Main fuera un miembro de la clase.

Los tipos declarados dentro de una clase sin un modificador de acceso adoptan el valor predeterminado de private, por lo que los miembros de datos de este ejemplo seguirían siendo private si se quitara la palabra clave.

Por último, tenga en cuenta que, para el objeto creado mediante el constructor sin parámetros (child3), el campo age se ha inicializado en cero de forma predeterminada.

Especificación del lenguaje C#

Para obtener más información, consulte 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