Tipos anidados (Guía de programación de C#)Nested Types (C# Programming Guide)

Un tipo definido en una clase o struct se denomina tipo anidado.A type defined within a class or struct is called a nested type. Por ejemplo:For example:

class Container
{
    class Nested
    {
        Nested() { }
    }
}

Con independencia de si el tipo externo es una clase o struct, los tipos anidados se establecen de manera predeterminada en private, solo son accesibles desde su tipo contenedor.Regardless of whether the outer type is a class or a struct, nested types default to private; they are accessible only from their containing type. En el ejemplo anterior, la clase Nested es inaccesible a los tipos externos.In the previous example, the Nested class is inaccessible to external types.

También puede especificar un modificador de acceso para definir la accesibilidad de un tipo anidado, de la manera siguiente:You can also specify an access modifier to define the accessibility of a nested type, as follows:

En el ejemplo siguiente se convierte la clase Nested en public:The following example makes the Nested class public:

class Container
{
    public class Nested
    {
        Nested() { }
    }
}

El tipo anidado o interno puede tener acceso al tipo contenedor o externo.The nested, or inner, type can access the containing, or outer, type. Para tener acceso al tipo contenedor, páselo como un argumento al constructor del tipo anidado.To access the containing type, pass it as an argument to the constructor of the nested type. Por ejemplo:For example:

public class Container
{
    public class Nested
    {
        private Container parent;

        public Nested()
        {
        }
        public Nested(Container parent)
        {
            this.parent = parent;
        }
    }
}

Un tipo anidado tiene acceso a todos los miembros que estén accesibles para el tipo contenedor.A nested type has access to all of the members that are accessible to its containing type. Puede tener acceso a los miembros privados y protegidos del tipo contenedor, incluidos los miembros protegidos heredados.It can access private and protected members of the containing type, including any inherited protected members.

En la declaración anterior, el nombre completo de la clase Nested es Container.Nested.In the previous declaration, the full name of class Nested is Container.Nested. Este es el nombre que se utiliza para crear una instancia nueva de la clase anidada, de la siguiente manera:This is the name used to create a new instance of the nested class, as follows:

Container.Nested nest = new Container.Nested();

Vea tambiénSee also