Fundamentos de las clases (C# y Java)

Actualización: noviembre 2007

En las secciones siguientes se comparan los modificadores de C# y Java.

Modificadores de acceso

Los modificadores de C# son bastante similares a los de Java, con varias diferencias pequeñas. Cada miembro de una clase, o la propia clase, se puede declarar con un modificador de acceso para definir el ámbito de acceso permitido. Las clases no declaradas dentro de otras clases sólo pueden especificar los modificadores públicos o internos. Las clases anidadas, como otros miembros de clase, pueden especificar cualquiera de los cinco modificadores de acceso siguientes:

  • public

    Visible para todos.

  • protected

    Visible sólo desde clases derivadas.

  • private

    Visible sólo dentro de la clase dada.

  • internal

    Visible sólo dentro del mismo ensamblado.

  • protected internal

    Visible sólo para el ensamblado actual o los tipos derivados de la clase contenedora.

Modificadores public, protected y private

Un modificador public permite que el miembro esté disponible en cualquier parte, tanto dentro como fuera de la clase. Un modificador protected indica que el acceso está limitado al interior de la clase contenedora o las clases derivadas de ésta. Un modificador private implica que el acceso sólo es posible desde dentro del tipo contenedor. En C#, el modificador de acceso predeterminado es privado, mientras que en Java el acceso se establece como predeterminado en cualquier parte desde dentro del paquete contenedor.

Modificador internal

A un elemento internal sólo se puede tener acceso desde dentro del ensamblado actual. Un ensamblado de .NET Framework es casi equivalente a un archivo JAR de Java; representa los bloques de creación a partir de los cuales se pueden crear otros programas.

Modificador protected internal

Un elemento protected internal está visible sólo para el ensamblado actual o los tipos derivados de la clase contenedora.

Modificador sealed

Una clase con el modificador sealed en la declaración de clase es lo opuesto a una clase abstracta: no se puede heredar. Puede marcar una clase como sealed para evitar que otras clases reemplacen su funcionalidad. Naturalmente, una clase con el modificador sealed no puede ser abstracta. Observe también que a una estructura se le aplica implícitamente el modificador sealed; por consiguiente, no se puede heredar. El modificador sealed es equivalente a marcar una clase con la palabra clave final en Java.

Modificador readonly

Para definir una constante en C#, utilice el modificador const o readonly en lugar de la palabra clave final de Java. El factor distintivo entre los dos modificadores de C# es que los elementos const se tratan en tiempo de compilación, mientras que valores de los campos readonly se especifican en tiempo de ejecución. Esto significa que la asignación a los campos readonly se puede producir tanto en el constructor de clase como en la declaración. Por ejemplo, la clase siguiente declara una variable readonly denominada IntegerVariable que se inicializa en el constructor de clase:

public class SampleClass
{
    private readonly int intConstant;

    public SampleClass ()  //constructor
    {
        // You are allowed to set the value of the readonly variable 
        // inside the constructor
        intConstant = 5;
    }


    public int IntegerConstant
    {
        set
        {
            // You are not allowed to set the value of the readonly variable 
            // anywhere else but inside the constructor

            // intConstant = value;  // compile-time error
        }
        get
        {
            return intConstant;
        }
    }
}
class TestSampleClass
{
    static void Main()
    {
        SampleClass obj= new SampleClass();

        // You cannot perform this operation on a readonly field.
        obj.IntegerConstant = 100;

        System.Console.WriteLine("intConstant is {0}", obj.IntegerConstant);  // 5
    }
}

Si se aplica un modificador readonly a un campo estático, se debe inicializar en el constructor estático de la clase.

Vea también

Conceptos

Guía de programación de C#

Referencia

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

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

Otros recursos

Lenguaje de programación C# para desarrolladores de Java