class (Referencia de C#)class (C# Reference)

Las clases se declaran mediante la palabra clave class, como se muestra en el siguiente ejemplo:Classes are declared using the keyword class, as shown in the following example:

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

ComentariosRemarks

Solo la herencia simple se permite en C#.Only single inheritance is allowed in C#. En otras palabras, una clase puede heredar la implementación solo de una clase base.In other words, a class can inherit implementation from one base class only. En cambio, una clase puede implementar más de una interfaz.However, a class can implement more than one interface. En la tabla siguiente se muestran ejemplos de herencia de clases e implementación de interfaces:The following table shows examples of class inheritance and interface implementation:

HerenciaInheritance EjemploExample
NingunaNone class ClassA { }
SingleSingle class DerivedClass: BaseClass { }
Ninguna, implementa dos interfacesNone, implements two interfaces class ImplClass: IFace1, IFace2 { }
Única, implementa una interfazSingle, implements one interface 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.Classes that you declare directly within a namespace, not nested within other classes, can be either public or internal. De forma predeterminada, las clases son internal.Classes are internal by default.

Los miembros de clase, incluidas las clases anidadas, pueden ser public, protected internal, protected, internal, private o private protected.Class members, including nested classes, can be public, protected internal, protected, internal, private, or private protected. De forma predeterminada, los miembros son private.Members are private by default.

Para obtener más información, consulte Modificadores de acceso.For more information, see Access Modifiers.

Puede declarar clases genéricas que tengan parámetros de tipo.You can declare generic classes that have type parameters. Para obtener más información, consulte Clases genéricas.For more information, see Generic Classes.

Una clase puede contener declaraciones de los miembros siguientes:A class can contain declarations of the following members:

EjemploExample

En el ejemplo siguiente se muestra cómo declarar campos de clase, constructores y métodos.The following example demonstrates declaring class fields, constructors, and methods. También se muestra la creación de instancias de objeto y la impresión de datos de instancias.It also demonstrates object instantiation and printing instance data. En este ejemplo, se declaran dos clases.In this example, two classes are declared. La primera clase, Child, contiene dos campos privados (name y age), dos constructores públicos y un método público.The first class, Child, contains two private fields (name and age), two public constructors and one public method. La segunda clase, StringTest, se usa para contener Main.The second class, StringTest, is used to contain 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.
*/

ComentariosComments

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.Notice that in the previous example the private fields (name and age) can only be accessed through the public method of the Child class. Por ejemplo, no puede imprimir el nombre de la clase child, desde el método Main, mediante una instrucción como esta:For example, you cannot print the child's name, from the Main method, using a statement like this:

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.Accessing private members of Child from Main would only be possible if Main were a member of the class.

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.Types declared inside a class without an access modifier default to private, so the data members in this example would still be private if the keyword were removed.

Por último, tenga en cuenta que, para el objeto creado mediante el constructor predeterminado (child3), el campo age se ha inicializado a cero de forma predeterminada.Finally, notice that for the object created using the default constructor (child3), the age field was initialized to zero by default.

Especificación del lenguaje C#C# language specification

Para obtener más información, consulte la Especificación del lenguaje C#.For more information, see the C# Language Specification. La especificación del lenguaje es la fuente definitiva de la sintaxis y el uso de C#.The language specification is the definitive source for C# syntax and usage.

Vea tambiénSee also