Programación orientada a objetos (C# y Visual Basic)

Todos los lenguajes administrados en el.NET Framework, como Visual Basic y C#, proporcionan compatibilidad completa para la programación orientada a objetos como encapsulación, herencia y polimorfismo.

Encapsulación significa que un grupo de propiedades relacionadas, métodos y otros miembros se tratan como una sola unidad u objeto.

Herencia Describe la capacidad de crear nuevas clases basadas en una clase existente.

Polimorfismo significa que puede tener varias clases que se pueden utilizar indistintamente, aunque cada clase implementa las mismas propiedades o métodos de maneras diferentes.

En esta sección se describe los siguientes conceptos:

  • Clases y objetos

    • Miembros de clase

      Los campos y propiedades

      Métodos

      Constructores

      Destructores

      Eventos

      Clases anidadas

    • Modificadores de acceso y los niveles de acceso

    • Instancias de clases

    • Estático (compartido) clases y miembros

    • Tipos anónimos

  • Herencia

    • Miembros de reemplazo
  • Interfaces

  • Componentes genéricos

  • Delegados

Clases y objetos

Los términos clase y objeto se utilizan a veces indistintamente, pero de hecho, las clases describen la tipo de objetos, mientras que los objetos son utilizables instancias de clases.Por lo tanto, se llama la acción de crear un objeto creación de instancias.Con la analogía de plano, una clase es un plano y un objeto es un edificio construido a partir de ese plano.

Para definir una clase:

Class SampleClass
End Class
class SampleClass
{
}

Visual Basic y C# también proporcionan una versión "light" de clases llamadas estructuras que son útiles cuando se necesita crear una matriz grande de objetos y hacer consumir demasiada memoria para el que desea.

Para definir una estructura:

Structure SampleStructure
End Structure
struct SampleStruct
{
}

Para obtener más información, consulte:

Dd460654.collapse_all(es-es,VS.110).gifMiembros de clase

Cada clase puede tener diferentes miembros de clase que incluyen propiedades que describen los datos de la clase, los métodos que definen el comportamiento de la clase y los eventos que proporcionan comunicación entre las distintas clases y objetos.

Dd460654.collapse_all(es-es,VS.110).gifLos campos y propiedades

Campos y propiedades representan información que contiene un objeto.Los campos son igual que las variables ya que se pueden leer o establecer directamente.

Para definir un campo:

Class SampleClass
    Public SampleField As String
End Class
Class SampleClass
{
    public string sampleField;
}

Propiedades tienen get y establecer los procedimientos, que proporcionan más control sobre cómo se establecen o devuelven los valores.

C# y de Visual Basic permiten ya sea crear un campo privado para almacenar el valor de propiedad o llamadas propiedades implementadas automáticamente que crean este campo automáticamente entre bastidores y proporcionan la lógica básica para los procedimientos de propiedad.

Para definir una propiedad implementada automáticamente:

Class SampleClass
    Public Property SampleProperty as String
End Class
class SampleClass
{
    public int SampleProperty { get; set; }
}

Si necesita realizar algunas operaciones adicionales para leer y escribir el valor de propiedad, defina un campo para almacenar el valor de propiedad y proporcionar la lógica básica para almacenar y recuperarlo:

Class Samplelass
    Private m_Sample As String
    Public Property Sample() As String
        Get
            ' Return the value stored in the field.
            Return m_Sample
        End Get
        Set(ByVal Value As String)
            ' Store the value in the field.
            m_Sample = Value
        End Set
    End Property
End Class
class SampleClass
{
    private int _sample;
    public int Sample
    {
        // Return the value stored in a field.
        get { return _sample; }
        // Store the value in the field.
        set { _sample = value; }
    }
}

Mayoría de las propiedades tiene métodos o procedimientos para configurar y obtener el valor de propiedad.Sin embargo, puede crear propiedades de sólo lectura o sólo escritura para restringir su modificación o la lectura.En Visual Basic se puede utilizar Sólo lectura y WriteOnly palabras clave.En C#, se puede omitir el Get o conjunto método de propiedad.Sin embargo, en Visual Basic y C#, las propiedades implementadas automáticamente no pueden ser de sólo lectura o sólo escritura.

Para obtener más información, consulte:

Dd460654.collapse_all(es-es,VS.110).gifMétodos

A método es una acción que puede realizar un objeto.

[!NOTA]

En Visual Basic, hay dos formas de crear un método: el Sub se utiliza la instrucción si el método no devuelve un valor; el Función se utiliza la instrucción si un método devuelve un valor.

Para definir un método de una clase:

Class SampleClass
    Public Function SampleFunc(ByVal SampleParam As String)
        ' Add code here
    End Function
End Class
class SampleClass
{
    public int sampleMethod(string sampleParam)
    {
        // Insert code here
    }
}

Una clase puede tener varias implementaciones, o sobrecargas, del mismo método que se diferencian en el número de parámetros o tipos de parámetros.

Para sobrecargar un método:

Overloads Sub Display(ByVal theChar As Char)
    ' Add code that displays Char data.
End Sub
Overloads Sub Display(ByVal theInteger As Integer)
    ' Add code that displays Integer data.
End Sub
public int sampleMethod(string sampleParam) {};
public int sampleMethod(int sampleParam) {}

En la mayoría de los casos se declara un método dentro de una definición de clase.Sin embargo, Visual Basic y C# también son compatibles con métodos de extensión que le permiten agregar métodos a una clase existente fuera de la definición de la clase.

Para obtener más información, consulte:

Dd460654.collapse_all(es-es,VS.110).gifConstructores

Los constructores son métodos de la clase que se ejecutan automáticamente cuando se crea un objeto de un tipo determinado.Normalmente, los constructores inicializan a los miembros de datos del nuevo objeto.Un constructor puede ejecutar sólo una vez cuando se crea una clase.Además, el código en el constructor siempre se ejecuta antes que cualquier otro código en una clase.Sin embargo, puede crear varias sobrecargas del constructor de la misma manera que cualquier otro método.

Para definir un constructor de una clase:

Class SampleClass
    Sub New(ByVal s As String)
        // Add code here.
    End Sub
End Class
public class SampleClass
{
    public SampleClass()
    {
        // Add code here
    }
}

Para obtener más información, consulte:

Dd460654.collapse_all(es-es,VS.110).gifDestructores

Los destructores se utilizan para destruir instancias de clases.En el.NET Framework, el recolector de elementos no utilizados administra automáticamente la asignación y liberación de memoria para los objetos administrados en la aplicación.Sin embargo, puede que aún tenga destructores para limpiar recursos no administrados que crea la aplicación.Puede haber sólo un destructor para una clase.

Para obtener más información acerca de los destructores y recolección de elementos en el.NET Framework, vea recolección de elementos no utilizados.

Dd460654.collapse_all(es-es,VS.110).gifEventos

Eventos habilitan una clase u objeto para notificarlo a otras clases u objetos algo interesante se produce.La clase que envía (o aumenta) el evento se denomina el Publisher y las clases que reciben el evento (o identificador) se denominan suscriptores.Para obtener más información acerca de los eventos, cómo se provocan y controlan, vea Controlar y provocar eventos.

Dd460654.collapse_all(es-es,VS.110).gifClases anidadas

Se llama a una clase definida dentro de otra clase anidados.De forma predeterminada, la clase anidada es privada.

Class Container
    Class Nested
    ' Add code here.
    End Class
End Class
class Container
{
    class Nested
    {
        // Add code here.
    }
}

Para crear una instancia de la clase anidada, utilice el nombre de la clase contenedora seguido del punto y, a continuación, seguido del nombre de la clase anidada:

Dim nestedInstance As Container.Nested = New Container.Nested()
Container.Nested nestedInstance = new Container.Nested()

Dd460654.collapse_all(es-es,VS.110).gifModificadores de acceso y los niveles de acceso

Todas las clases y miembros de clase pueden especificar qué nivel de acceso que se proporcionan a otras clases mediante el uso de modificadores de acceso.

Los modificadores de acceso siguientes están disponibles:

Modificador de Visual Basic

Modificador C#

Definición de

Public (Visual Basic)

pública

El tipo o miembro puede obtenerse por cualquier otro código en el mismo ensamblado o en otro ensamblado que hace referencia a ella.

Private (Visual Basic)

privada

El tipo o miembro sólo puede obtenerse mediante código en la misma clase.

Protected (Visual Basic)

protegido

El tipo o miembro sólo puede obtenerse por código de la misma clase o de una clase derivada.

Friend (Visual Basic)

interno

Puede obtenerse el tipo o miembro cualquier código en el mismo ensamblado, pero no desde otro ensamblado.

Protected Friend

protected internal

El tipo o miembro puede obtenerse por cualquier código en el mismo ensamblado, o por cualquier clase derivada de otro ensamblado.

Para obtener más información, vea Niveles de acceso en Visual Basic y Modificadores de acceso (Guía de programación de C#).

Dd460654.collapse_all(es-es,VS.110).gifInstancias de clases

Para crear un objeto, debe crear una instancia de una clase, o crear una instancia de clase.

Dim sampleObject as New SampleClass()
SampleClass sampleObject = new SampleClass();

Después de crear una instancia de una clase, puede asignar valores a propiedades y campos de la instancia y llamar a métodos de clase.

' Set a property value.
sampleObject.SampleProperty = "Sample String"
' Call a method.
sampleObject.SampleMethod()
// Set a property value.
sampleObject.sampleProperty = "Sample String";
// Call a method.
sampleObject.sampleMethod();

Para asignar valores a propiedades durante el proceso de creación de instancias de clase, utilice a los inicializadores de objeto:

Dim sampleObject = New SampleClass With 
    {.FirstProperty = "A", .SecondProperty = "B"}
// Set a property value.
SampleClass sampleObject = new SampleClass 
    { FirstProperty = "A", SecondProperty = "B" };

Para obtener más información, consulte:

Dd460654.collapse_all(es-es,VS.110).gifEstático (compartido) clases y miembros

Un miembro static (shared en Visual Basic) de la clase es una propiedad, procedimiento o campo que comparten todas las instancias de una clase.

Para definir a un miembro estático (compartido):

Class SampleClass
    Public Shared SampleString As String = "Sample String"
End Class
static class SampleClass
{
    public static string SampleString = "Sample String";
}

Para tener acceso a miembro estático (compartido), utilice el nombre de la clase sin crear un objeto de esta clase:

MsgBox(SampleClass.SampleString)
Console.WriteLine(SampleClass.SampleString);

Clases estáticas de (compartidas) en C# y los módulos de Visual Basic tienen estáticos (compartidos) sólo los miembros y no se puede crear una instancia.No los miembros estáticos de (compartidos) también pueden tener acceso no estático (no compartidos) propiedades, campos o métodos

Para obtener más información, consulte:

Dd460654.collapse_all(es-es,VS.110).gifTipos anónimos

Los tipos anónimos permiten crear objetos sin tener que escribir una definición de clase para el tipo de datos.En su lugar, el compilador genera una clase para usted.La clase no tiene ningún nombre utilizable y contiene las propiedades especificadas al declarar el objeto.

Para crear una instancia de un tipo anónimo:

' sampleObject is an instance of a simple anonymous type.
Dim sampleObject = 
    New With {Key .FirstProperty = "A", .SecondProperty = "B"}
// sampleObject is an instance of a simple anonymous type.
var sampleObject = 
    new { FirstProperty = "A", SecondProperty = "B" };

Para obtener más información, consulte:

Herencia

La herencia permite crear una nueva clase que se vuelve a utilizar, se extiende y modifica el comportamiento que se define en otra clase.La clase cuyos miembros se heredan se denomina el clase base, y la clase que hereda esos miembros se denomina el clase derivada.Sin embargo, todas las clases de C# y de Visual Basic heredan implícitamente de la [Object] clase que admite la jerarquía de clases de .NET y proporciona servicios de bajo nivel a todas las clases.

[!NOTA]

Los lenguajes administrados en el.NET Framework no admiten la herencia múltiple,.e. puede especificar sólo una clase base para una clase derivada.

Al heredar de una clase base:

Class DerivedClass
    Inherits BaseClass
End Class
class DerivedClass:BaseClass{}

De forma predeterminada todas las clases pueden heredar.Sin embargo, puede especificar si una clase no debe utilizarse como una clase base, o crea una clase que se puede utilizar como clase base.

Para especificar que una clase no puede utilizarse como una clase base:

NotInheritable Class SampleClass
End Class
public sealed class A { }

Para especificar que una clase puede utilizarse como clase base y no se puede crear una instancia:

MustInherit Class BaseClass
End Class
public abstract class B { }

Para obtener más información, consulte:

Dd460654.collapse_all(es-es,VS.110).gifMiembros de reemplazo

De forma predeterminada, una clase derivada hereda a todos los miembros de su clase base.Si desea cambiar el comportamiento del miembro heredado, debe reemplazarlo.Es decir, puede definir una nueva implementación del método, propiedad o evento en la clase derivada.

Los modificadores siguientes se utilizan para controlar cómo se reemplazan las propiedades y métodos:

Modificador de Visual Basic

Modificador C#

Definición de

Overridable (Visual Basic)

virtual (Referencia de C#)

Permite a un miembro de clase que sea reemplazada en una clase derivada.

Overrides (Visual Basic)

override (Referencia de C#)

Reemplaza a un miembro (reemplazable) virtual definido en la clase base.

NotOverridable (Visual Basic)

No se admite

Impide que un miembro se invalide en una clase heredada.

MustOverride (Visual Basic)

abstract (Referencia de C#)

Requiere que un miembro de clase que sea reemplazada en la clase derivada.

Shadows (Visual Basic)

new (Modificador, Referencia de C#)

Oculta un miembro heredado de una clase base

Interfaces

Las interfaces, como clases, definen un conjunto de propiedades, métodos y eventos.Pero a diferencia de las clases, interfaces no proporcionan implementación.Se implementan las clases y definen como entidades separadas de las clases.Una interfaz representa un contrato, en que una clase que implementa una interfaz debe implementar todos los aspectos de dicha interfaz exactamente como se define.

Para definir una interfaz:

Public Interface ISampleInterface
    Sub DoSomething()
End Interface
interface ISampleInterface
{
    void doSomething();
}

Para implementar una interfaz en una clase:

Class SampleClass
    Implements ISampleInterface
    Sub doSomething
        ' Method implementation.
    End Sub
End Class
class SampleClass : ISampleInterface
{
    void ISampleInterface.SampleMethod()
    {
        // Method implementation.
    }
}

Para obtener más información, consulte:

Componentes genéricos

Pueden que las clases, estructuras, interfaces y métodos en el.NET Framework parámetros de tipo que definen tipos de objetos que se pueden almacenar o utilizar.El ejemplo más común de genéricos es una colección, donde puede especificar el tipo de objetos que se almacenan en una colección.

Para definir una clase genérica:

Class SampleGeneric(Of T)
    Public Field As T
End Class
Public class SampleGeneric<T> 
{
    public T Field;
}

Para crear una instancia de una clase genérica:

Dim sampleObject As New SampleGeneric(Of String)
sampleObject.Field = "Sample string"
SampleGeneric<string> sampleObject = new SampleGeneric<string>();
sampleObject.Field = "Sample string";

Para obtener más información, consulte:

Delegados

A delegado es un tipo que define una firma de método y puede proporcionar una referencia a cualquier método con una firma compatible.Puede invocar (o llamar) al método a través del delegado.Los delegados se utilizan para pasar métodos como argumentos a otros métodos.

[!NOTA]

Los controladores de eventos no son más que los métodos que se invocan a través de los delegados.Para obtener más información acerca de cómo utilizar delegados en el control de eventos, vea Eventos y delegados.

Para crear a un delegado:

Delegate Sub SampleDelegate(ByVal str As String)
public delegate void SampleDelegate(string str);

Para crear una referencia a un método que coincida con la firma especificada por el delegado:

Class SampleClass
    ' Method that matches the SampleDelegate signature.
    Sub SampleSub(ByVal str As String)
        ' Add code here.
    End Sub
    ' Method that instantiates the delegate.
    Sub SampleDelegateSub()
        Dim sd As SampleDelegate = AddressOf SampleSub
        sd("Sample string")
    End Sub
End Class
class SampleClass
{
    // Method that matches the SampleDelegate signature.
    public static void sampleMethod(string message)
    {
        // Add code here.
    }
    // Method that instantiates the delegate.
    void SampleDelegate()
    {
        SampleDelegate sd = sampleMethod;
        sd("Sample string");
    }
}

Para obtener más información, consulte:

Vea también

Conceptos

Guía de programación de C#

Otros recursos

Guía de programación en Visual Basic