Anda di halaman 1dari 30

Gua de programacin de Visual Basic

Introduccin a los objetos en Visual Basic


Un objeto es una estructura que contiene la informacin y los mtodos que manipulan los datos. Casi todas las tareas realizadas en Visual Basic estn asociadas con objetos. Si no tiene experiencia en programacin orientada a objetos, los siguientes trminos y conceptos le ayudarn a comenzar. Clases y objetos Las palabras "clase" y "objeto" se usan con tanta frecuencia en la programacin orientada a objetos que es fcil confundir los trminos. En general, una class es una representacin abstracta de algo, mientras que un objeto es un ejemplo utilizable de lo que representa la clase. La nica excepcin a esta regla la constituyen los miembros de clases compartidas, que pueden utilizarse en instancias de una clase y en variables de objeto declaradas como tipo de la clase. Campos, propiedades, mtodos y eventos Las clases se componen de campos, propiedades, mtodos y eventos. Los campos y propiedades representan informacin que contiene un objeto. Los campos se parecen a las variables ya que se pueden leer y establecer directamente. Por ejemplo, si tiene un objeto denominado "Car", podra almacenar su color en un campo denominado "Color". Las propiedades se recuperan y establecen como los campos, pero se implementan mediante los procedimientos propiedad Get y Set, que proporcionan ms control sobre la forma en que los valores se establecen o se devuelven. El nivel de direccionamiento indirecto entre el valor que se va a almacenar y los procedimientos que lo usan ayuda a aislar los datos y permite validar valores antes de asignarlos o recuperarlos. Los mtodos representan acciones que un objeto puede realizar. Por ejemplo, un objeto "Car" podra tener los mtodos "StartEngine", "Drive" y "Stop". Los mtodos se definen agregando procedimientos, ya sean rutinas o funciones Sub, a la clase. Los eventos son notificaciones que un objeto recibe de, o transmite a, otros objetos o aplicaciones. Los eventos permiten a los objetos realizar acciones siempre que se produce un acontecimiento especfico. Un ejemplo de evento para la clase "Car" sera un evento "Check_Engine". Puesto que Microsoft Windows es un sistema controlado por eventos, stos pueden proceder de otros objetos, aplicaciones o entradas de usuario realizadas al hacer clic con el mouse (ratn) o al presionar teclas. Encapsulacin, herencia y polimorfismo Los campos, propiedades, mtodos y eventos son solamente la mitad de la ecuacin de la programacin orientada a objetos. Para que la programacin orientada a objetos sea autntica los objetos deben admitir tres cualidades: encapsulacin, herencia y polimorfismo. La encapsulacin significa que un grupo de propiedades, mtodos y otros miembros relacionados se tratan como si de una sola unidad u objeto se tratase. Los objetos pueden controlar cmo se cambian propiedades o se ejecutan mtodos. Por ejemplo, un objeto puede validar valores antes de permitir cambios en la propiedad. La encapsulacin, adems, facilita la posibilidad de realizar cambios en la implementacin pasado algn tiempo, mediante una actividad denominada ocultacin de datos que permite ocultar los detalles de implementacin de los objetos. Herencia describe la posibilidad de crear nuevas clases basadas en una clase existente. La nueva clase hereda todas las propiedades, mtodos y eventos de la clase base, y puede personalizarse con propiedades y mtodos adicionales. Por ejemplo, puede crear una nueva clase denominada "Truck" basada en la clase "Car". La clase "Truck" hereda la propiedad "Color" de la clase "Car" y puede tener propiedades adicionales como "FourWheelDrive". Polimorfismo significa que puede tener mltiples clases que se pueden utilizar de forma intercambiable, si bien cada clase implementa las mismas propiedades o los mismos mtodos de maneras diferentes. El polimorfismo es importante en la programacin orientada a objetos puesto que permite usar elementos que tienen el mismo nombre, independientemente del tipo de objeto que se est utilizando en ese momento. Por ejemplo, dada una clase base "Car", el polimorfismo permite al programador definir diferentes mtodos "StartEngine" para cualquier nmero de clases derivadas. El mtodo "StartEngine" de una clase derivada denominada "DieselCar" puede ser totalmente diferente del mtodo con el mismo nombre en la clase base. Otros procedimientos o mtodos pueden usar el

mtodo "StartEngine" de las clases derivadas de la misma forma, con independencia del tipo de objeto "Car" que se est utilizando en ese momento. Sobrecarga, reemplazo y sombreado La sobrecarga, el reemplazo y el sombreado son conceptos similares que pueden confundirse fcilmente. Aunque las tres tcnicas permiten crear miembros con el mismo nombre, existen algunas diferencias importantes.

Los miembros sobrecargados se utilizan para proporcionar diferentes versiones de una propiedad o mtodo que tienen el mismo nombre, pero que aceptan un nmero diferente de parmetros, o parmetros con diferentes tipos de datos.

Las propiedades y mtodos reemplazados se utilizan para reemplazar una propiedad o mtodo heredados que no son apropiados en una clase derivada. Los miembros reemplazados deben aceptar el mismo tipo de datos y nmero de argumentos. Las clases derivadas heredan los miembros reemplazados.

Los miembros sombreados se utilizan para reemplazar localmente un miembro que tiene un mbito ms amplio. Cualquier tipo puede sombrear cualquier otro tipo. Por ejemplo, puede declarar un propiedad que sombree un mtodo heredado con el mismo nombre. Los miembros sombreados no se pueden heredar.

Gua de programacin de Visual Basic

Objetos y clases
Un objeto es una combinacin de cdigo y datos que puede tratarse como una unidad. Un objeto puede ser una porcin de una aplicacin, como un control o un formulario. Una aplicacin entera tambin puede ser un objeto. Reutilizar el cdigo Los objetos permiten declarar variables y procedimientos una vez y utilizarlos siempre que sean necesarios. Por ejemplo, si desea agregar un corrector ortogrfico a una aplicacin, puede definir todas las variables y funciones auxiliares para proporcionar funcionalidad de correccin ortogrfica. Si crea el corrector ortogrfico como una clase, puede volver a utilizarlo en otras aplicaciones mediante la inclusin de una referencia en el ensamblado compilado. An mejor, tal vez pueda ahorrarse trabajo mediante el uso de una clase de corrector ortogrfico que otra persona ya haya desarrollado. Clases Cada objeto de Visual Basic est definido por una clase. Una clase describe las variables, propiedades, procedimientos y eventos de un objeto. Los objetos son instancias de clases; pueden crearse tantos objetos como sean necesarios una vez que se defina una clase. Para comprender la relacin entre un objeto y su clase, piense en los moldes de hacer galletas y en las galletas. El molde es la clase. Define las caractersticas de cada galleta, por ejemplo, el tamao y la forma. La clase se utiliza para crear objetos. Los objetos son las galletas. Dos ejemplos en Visual Basic podran ayudar a ilustrar la relacin entre las clases y objetos.

Los controles en el Cuadro de herramientas de Visual Basic representan las clases. Cuando se arrastra un control del Cuadro de herramientas a un formulario, se est creando un objeto; una instancia de una clase.

El formulario con el que se trabaja en tiempo de diseo es una clase. En tiempo de ejecucin, Visual Basic crea una instancia de la clase del formulario, es decir, un objeto.

Varias instancias Los objetos recientemente creados a partir de una clase son a menudo idnticos. Una vez que existen como objetos individuales no obstante, sus variables y propiedades se pueden cambiar independientemente de las dems instancias. Por ejemplo, si agrega tres casillas de verificacin a un formulario, cada objeto de botn de casilla de verificacin es una instancia de la clase CheckBox [ http://msdn.microsoft.com/es-mx/library/system.windows.forms.checkbox(printer).aspx ] . Los objetos CheckBox [ http://msdn.microsoft.com/esmx/library/system.windows.forms.checkbox(printer).aspx ] individuales comparten un conjunto de caractersticas y funciones comunes (propiedades, variables, procedimientos y eventos) definidos por la clase. No obstante, cada uno tiene su propio nombre, puede habilitarse y deshabilitarse por separado, y puede colocarse en una ubicacin diferente en el formulario. Gua de programacin de Visual Basic

Cmo: Crear un objeto


Una objeto es una instancia de una clase. Para usar los miembros de la clase debe crear primero un objeto a partir de ella.

Para crear un objeto a partir de una clase


1. 2. Determine en qu clase desea crear un objeto. Escriba Instruccin Dim (Visual Basic) [ http://msdn.microsoft.com/esmx/library/7ee5a7s1(printer).aspx ] para crear una variable a la que puede asignar una instancia de clase. La variable debe ser del tipo de la clase deseada. Copiar cdigo

Dim nextCustomer As customer


3. Agregue la palabra clave New (Visual Basic) [ http://msdn.microsoft.com/esmx/library/77s47661(printer).aspx ] para inicializar la variable a una nueva instancia de la clase. Copiar cdigo

Dim nextCustomer As New customer


4. Puede tener acceso a los miembros de la clase ahora a travs de la variable de objeto. Copiar cdigo

nextCustomer.accountNumber = lastAccountNumber + 1
Programacin eficaz Siempre que sea posible, debe declarar la variable para que sea del tipo de clase que piensa asignarle. Esto se llama enlace en tiempo de compilacin. Si no conoce el tipo de clase en el tiempo de compilacin, puede invocar el enlace en tiempo de ejecucin declarando la variable para que sea Object (Tipo de datos) [ http://msdn.microsoft.com/es-mx/library/twcxd6b8(printer).aspx ] . Sin embargo, el enlace en tiempo de ejecucin puede ralentizar el rendimiento y limitar el acceso a los miembros del objeto en tiempo de ejecucin. Para obtener ms informacin, consulte Declaracin de variables de objeto [ http://msdn.microsoft.com/es-mx/library/cfwx51t1(printer).aspx ] .

Gua de programacin de Visual Basic

Herencia en Visual Basic


Visual Basic admite el concepto de herencia, que es la posibilidad de definir clases que sirven de base para clases derivadas. Las clases derivadas heredan, y pueden extender, las propiedades, mtodos y eventos de la clase base. Las clases derivadas tambin pueden reemplazar mtodos heredados con nuevas implementaciones. De manera predeterminada, se pueden heredar todas las clases creadas con Visual Basic. La herencia permite escribir y depurar una clase una vez, y despus volver a usar ese cdigo como base de nuevas clases. La herencia tambin permite usar el polimorfismo basado en la herencia, que se trata de la posibilidad de definir clases que pueden usarse de forma intercambiable mediante cdigo cliente en tiempo de ejecucin, pero con funcionalidad diferente, incluso con mtodos o propiedades denominados de manera idntica. En esta seccin Fundamentos de la herencia [ http://msdn.microsoft.com/es-es/library/c8shwxa5(printer).aspx ] Se describen los modificadores de herencia, la forma de reemplazar mtodos y propiedades, MyClass y MyBase. Cmo: Crear clases derivadas [ http://msdn.microsoft.com/es-es/library/0wcc7ds7(printer).aspx ] Se describe paso a paso el proceso de creacin de clases derivadas. Cundo utilizar la herencia [ http://msdn.microsoft.com/es-es/library/27db6csx(printer).aspx ] Se explica cundo se debe utilizar la herencia en lugar de interfaces. Herencia y .NET Framework [ http://msdn.microsoft.com/es-es/library/6z8kc5wb(printer).aspx ] Explica cmo .NET Framework admite la herencia. Tutorial: Implementar la herencia mediante objetos COM [ http://msdn.microsoft.com/eses/library/2044hysa(printer).aspx ] Se describe la forma de utilizar objetos COM existentes como base de nuevos objetos. La herencia y la clase de objeto base [ http://msdn.microsoft.com/eses/library/0zw9e48h(printer).aspx ] Se proporciona informacin general sobre la clase que sirve de base para todas las dems clases. Cmo funcionan los mtodos New y Finalize en una jerarqua de clases [ http://msdn.microsoft.com/es-es/library/0kytk55e(printer).aspx ] Se describe la forma de llamar a constructores y destructores en una jerarqua de clases. Polimorfismo [ http://msdn.microsoft.com/es-es/library/z165t2xk(printer).aspx ] Se describe el polimorfismo y se explica la forma de utilizarlo. Disear una jerarqua de herencia [ http://msdn.microsoft.com/es-es/library/3f4dt11k(printer).aspx ] Se proporciona informacin sobre cmo disear e implementar una jerarqua de clases. Secciones relacionadas Interfaces en Visual Basic [ http://msdn.microsoft.com/es-es/library/28e2e18x(printer).aspx ] Se ofrece un resumen que describe las interfaces y la forma de utilizarlas. Programacin orientada a objetos en Visual Basic [ http://msdn.microsoft.com/eses/library/b86b82w0(printer).aspx ] Se presentan los conceptos de programacin orientada a objetos usados en Visual Basic. Gua de programacin de Visual Basic

Herencia y .NET Framework


Las aplicaciones de Visual Studio pueden utilizar muchas de las clases que se encuentran en .NET Framework como clases base. Las clases de atributo, por ejemplo, siempre estn basadas en la clase Attribute [ http://msdn.microsoft.com/es-es/library/system.attribute(printer).aspx ] . Otras clases base tiles de .NET Framework incluyen Component [ http://msdn.microsoft.com/es-

es/library/system.componentmodel.component(printer).aspx ] que se hereda para definir los componentes y Exception [ http://msdn.microsoft.com/es-es/library/system.exception(printer).aspx ] que se hereda para definir las clases de excepcin personalizadas. .NET Framework es ms que un origen para las clases base; garantiza la compatibilidad entre clases creadas con lenguajes de programacin diferentes. las clases de Visual Basic pueden heredar de las clases en ensamblados creados por cualquier lenguaje admitido por Visual Studio. Las clases que crea en Visual Basic tambin se pueden utilizar como clases base por otros lenguajes de programacin de .NET Framework. Gua de programacin de Visual Basic

Cundo utilizar la herencia


La herencia es un concepto de programacin til, pero es fcil utilizarlo de manera poco adecuada. A menudo, las interfaces solucionan mejor la situacin. Este tema y Cundo se deben utilizar interfaces [ http://msdn.microsoft.com/es-es/library/3b5b8ezk(printer).aspx ] le ayudan a entender cundo se debe utilizar cada enfoque. La herencia es una buena opcin cuando:

La jerarqua de herencia representa una relacin de identidad y no una relacin de pertenencia.

Se puede volver a utilizar cdigo de las clases base. Es necesario aplicar la misma clase y los mismos mtodos a tipos de datos diferentes. La jerarqua de clases es poco profunda y es poco probable que otros programadores agreguen muchos ms niveles.

Desea realizar cambios globales en clases derivadas modificando una clase base.

Estas consideraciones se explican en este orden a continuacin. Herencia y relaciones de identidad Dos maneras de mostrar las relaciones de clase en la programacin orientada a objetos son las relaciones de identidad y de pertenencia. En una relacin de identidad, la clase derivada es claramente un tipo de clase base. Por ejemplo, una clase denominada PremierCustomer representa una relacin de tipo identidad con una clase base denominada Customer, puesto que un cliente principal es un cliente. No obstante, una clase denominada CustomerReferral representa una relacin de pertenencia con la clase Customer porque una cartera de clientes tiene un cliente, pero no es un tipo de cliente. Los objetos de una jerarqua de herencia deben tener una relacin de identidad con la clase base puesto que heredan los campos, propiedades, mtodos y eventos definidos en dicha clase. Las clases que representan una relacin de pertenencia con otras clases no son vlidas para jerarquas de herencia debido a que podran heredar propiedades y mtodos inadecuados. Por ejemplo, si la clase CustomerReferral se derivase de la clase Customer descrita anteriormente, podra heredar propiedades que no tendran sentido, como ShippingPrefs y LastOrderPlaced. Las relaciones de pertenencia como sta deben representarse mediante clases o interfaces no relacionadas. La siguiente ilustracin muestra ejemplos de relaciones de tipo "es un" y "tiene un".

Clases base y reutilizacin de cdigo Otra razn para usar la herencia es la ventaja de poder reutilizar el cdigo. Las clases bien diseadas, una vez depuradas, pueden utilizarse una y otra vez como base de nuevas clases. Un ejemplo comn de reutilizacin eficaz de cdigo est relacionado con bibliotecas que administran estructuras de datos. Por ejemplo, suponga que tiene una gran aplicacin comercial que administra varias clases de listas en la memoria. Una es una copia en memoria de la base de datos de clientes, que se lee desde una base de datos al iniciar la sesin para conseguir mayor velocidad. La estructura de datos tendra un aspecto similar al siguiente: Visual Basic Copiar cdigo

Class CustomerInfo Protected PreviousCustomer As CustomerInfo Protected NextCustomer As CustomerInfo Public ID As Integer Public FullName As String

Public Sub InsertCustomer(ByVal FullName As String) ' Insert code to add a CustomerInfo item to the list. End Sub

Public Sub DeleteCustomer() ' Insert code to remove a CustomerInfo item from the list. End Sub

Public Function GetNextCustomer() As CustomerInfo ' Insert code to get the next CustomerInfo item from the list. Return NextCustomer End Function

Public Function GetPrevCustomer() As CustomerInfo 'Insert code to get the previous CustomerInfo item from the list. Return PreviousCustomer End Function End Class

La aplicacin tambin podra tener una lista similar de productos que el usuario ha agregado a una lista del carro de la compra, como se muestra en el siguiente fragmento de cdigo: Visual Basic Copiar cdigo

Class ShoppingCartItem Protected PreviousItem As ShoppingCartItem Protected NextItem As ShoppingCartItem Public ProductCode As Integer Public Function GetNextItem() As ShoppingCartItem ' Insert code to get the next ShoppingCartItem from the list. Return NextItem End Function End Class

Aqu puede ver un modelo: dos listas se comportan del mismo modo (inserciones, eliminaciones y recuperaciones) pero funcionan con tipos de datos diferentes. Mantener dos bases de cdigo para realizar esencialmente las mismas funciones no es eficaz. La solucin ms eficaz consiste en separar la administracin de listas en su propia clase y despus heredar de esa clase para diferentes tipos de datos: Visual Basic Copiar cdigo

Class ListItem Protected PreviousItem As ListItem Protected NextItem As ListItem Public Function GetNextItem() As ListItem ' Insert code to get the next item in the list. Return NextItem End Function Public Sub InsertNextItem() ' Insert code to add a item to the list. End Sub

Public Sub DeleteNextItem() ' Insert code to remove a item from the list. End Sub

Public Function GetPrevItem() As ListItem 'Insert code to get the previous item from the list. Return PreviousItem End Function End Class

La clase ListItem slo tiene que ser depurada una vez. Despus podr generar clases que la utilicen sin tener que pensar nunca ms sobre la administracin de listas. Por ejemplo: Visual Basic Copiar cdigo

Class CustomerInfo Inherits ListItem Public ID As Integer Public FullName As String End Class Class ShoppingCartItem Inherits ListItem Public ProductCode As Integer End Class

Aunque la reutilizacin de cdigo basado en la herencia es una herramienta eficaz, tambin tiene riesgos asociados. Incluso los sistemas mejor diseados cambian a veces de tal modo que los diseadores no podran prever. A veces, los cambios en una jerarqua de clases existente pueden tener consecuencias no deseadas; en la seccin Cambios en el diseo de la clase base despus de la implementacin [ http://msdn.microsoft.com/es-es/library/s57zewcx(printer).aspx ] de "El problema de fragilidad de la clase base" se describen algunos ejemplos. Clases derivadas intercambiables Las clases derivadas de una jerarqua de clases pueden a veces intercambiarse con la clase base, un proceso denominado polimorfismo basado en la herencia. Este enfoque combina las mejores caractersticas del polimorfismo basado en la interfaz con la opcin de reutilizar o reemplazar cdigo de una clase base. As, esto podra ser til en un paquete de dibujo. Por ejemplo, considere el siguiente fragmento de cdigo, que no utiliza herencia: Visual Basic Copiar cdigo

Sub Draw(ByVal Shape As DrawingShape, ByVal X As Integer, _ ByVal Y As Integer, ByVal Size As Integer)

Select Case Shape.type Case shpCircle ' Insert circle drawing code here. Case shpLine ' Insert line drawing code here.

End Select End Sub

Este enfoque presenta algunos problemas. Si alguien decide agregar una opcin de elipse posteriormente, ser necesario modificar el cdigo fuente; puede ocurrir que los usuarios a los que va dirigido ni siquiera tengan acceso al cdigo fuente. Un problema ms sutil consiste en que para dibujar una elipse se necesita otro parmetro (las elipses tienen un dimetro principal y uno secundario) que no sera relevante para el caso de la lnea. Si alguien desea agregar una polilnea (mltiples lneas conectadas), entonces se agregara otro parmetro que no sera relevante para otros casos. La herencia resuelve la mayora de estos problemas. Las clases base bien diseadas dejan la implementacin de mtodos especficos para las clases derivadas, de modo que se pueda incluir cualquier forma. Otros programadores pueden implementar mtodos en clases derivadas con la documentacin de la clase base. Otros elementos de clase (como las coordenadas x e y) se pueden integrar en la clase base porque todas las descendientes los utilizan. Por ejemplo, Draw podra ser un mtodo MustOverride: Visual Basic Copiar cdigo

MustInherit Class Shape Public X As Integer Public Y As Integer MustOverride Sub Draw() End Class

Despus podra agregar los elementos necesarios a esa clase para las diferentes formas. Por ejemplo, una clase Line podra necesitar nicamente un campo Length: Visual Basic Copiar cdigo

Class Line Inherits Shape Public Length As Integer Overrides Sub Draw() ' Insert code here to implement Draw for this shape. End Sub End Class

Este planteamiento es til debido a que otros programadores que no tienen acceso al cdigo fuente pueden extender la clase base con nuevas clases derivadas segn sea necesario. Por ejemplo, una clase denominada Rectangle podra derivarse de la clase Line: Visual Basic Copiar cdigo

Class Rectangle Inherits Line Public Width As Integer Overrides Sub Draw() ' Insert code here to implement Draw for the Rectangle shape.

End Sub End Class

En este ejemplo se muestra cmo se puede pasar de clases de propsito general a clases muy especficas mediante la implementacin de detalles en cada nivel. En este punto podra ser conveniente volver a evaluar si la clase derivada realmente representa una relacin de identidad o, por el contrario, es una relacin de pertenencia. Si la nueva clase de rectngulo se compone solamente de lneas, entonces la herencia no es la mejor opcin. No obstante, si el nuevo rectngulo es una lnea con una propiedad de ancho, entonces se mantiene la relacin de identidad. Jerarquas de clases poco profundas La herencia se adapta mejor a jerarquas de clases relativamente poco profundas. Las jerarquas de clases complejas y profundas en exceso pueden ser difciles de desarrollar. La decisin de utilizar una jerarqua de clases implica sopesar sus ventajas y su complejidad. Como norma general, las jerarquas deberan limitarse a seis niveles o menos. No obstante, la profundidad mxima de una jerarqua de clases concreta depende de varios factores, incluida la complejidad de cada nivel. Cambios globales en clases derivadas a travs de la clase base Una de las caractersticas ms eficaces de la herencia es la posibilidad de realizar cambios en una clase base que se propagan a las clases derivadas. Si se usa con cuidado, puede actualizarse la implementacin de un solo mtodo y decenas, e incluso cientos, de clases derivadas podrn utilizar el nuevo cdigo. No obstante, esta prctica puede resultar peligrosa puesto que tales cambios podran generar problemas en clases heredadas diseadas por otras personas. Debe tenerse cuidado para asegurarnos de que la nueva clase es compatible con las clases que utilizan la original. Concretamente, debe evitarse cambiar el nombre o el tipo de los miembros de la clase base. Suponga, por ejemplo, que disea una clase base con un campo de tipo Integer para almacenar la informacin de cdigo postal, y que otros programadores han creado clases derivadas que utilizan el campo de cdigo postal heredado. Suponga adems que el campo de cdigo postal almacena cinco dgitos y que la oficina de correos ha ampliado los cdigos postales con un guin y cuatro dgitos adicionales. En el peor de los casos, podra modificar el campo en la clase base para almacenar una cadena de diez caracteres, pero otros programadores tendran que cambiar y volver a compilar las clases derivadas para utilizar el tamao y el tipo de datos nuevos. La forma ms segura de cambiar una clase base es simplemente agregar nuevos miembros. Por ejemplo, podra agregar un nuevo campo para almacenar cuadro dgitos ms en el ejemplo de cdigo postal descrito anteriormente. De esta forma, las aplicaciones cliente pueden actualizarse para que utilicen el nuevo campo sin interrumpir las aplicaciones existentes. Esta posibilidad de extender clases base en una jerarqua de herencia es una ventaja importante que no existe con interfaces. Gua de programacin de Visual Basic

Polimorfismo
El polimorfismo se refiere a la posibilidad de definir mltiples clases con funcionalidad diferente, pero con mtodos o propiedades denominados de forma idntica, que pueden utilizarse de manera intercambiable mediante cdigo cliente en tiempo de ejecucin. En esta seccin Cmo proporciona Visual Basic polimorfismo [ http://msdn.microsoft.com/eses/library/28t6afce(printer).aspx ] Se ilustran distintos enfoques del polimorfismo. Polimorfismo basado en la herencia [ http://msdn.microsoft.com/es-es/library/akfttx8c(printer).aspx ] Se describe el uso de la herencia para conseguir el polimorfismo. Polimorfismo basado en la interfaz [ http://msdn.microsoft.com/es-es/library/z9k8e08x(printer).aspx ]

Se describe el uso de las interfaces para conseguir el polimorfismo. Secciones relacionadas Cundo se deben utilizar interfaces [ http://msdn.microsoft.com/es-es/library/3b5b8ezk(printer).aspx ] Explica cundo se deben utilizar interfaces en lugar de una jerarqua de herencia. Cundo utilizar la herencia [ http://msdn.microsoft.com/es-es/library/27db6csx(printer).aspx ] Proporciona informacin sobre cundo se debe utilizar la herencia en lugar de interfaces. Gua de programacin de Visual Basic

Cmo proporciona Visual Basic polimorfismo


Tradicionalmente, el polimorfismo en Visual Basic se realizaba mediante interfaces, y stas an pueden usarse para este propsito. Sin embargo, ahora, Visual Basic proporciona la opcin de usar la herencia para conseguir el polimorfismo. Como en otros temas de la programacin orientada a objetos, la opcin que debe utilizarse depende de los requisitos especficos. En general, use la herencia cuando desee crear funcionalidad bsica que las clases derivadas puedan extender; use interfaces cuando varias implementaciones diferentes deban proporcionar funcionalidad similar. Gua de programacin de Visual Basic

Polimorfismo basado en la herencia


La mayora de los sistemas de programacin orientada a objetos proporcionan polimorfismo a travs de la herencia. El polimorfismo basado en la herencia implica definir mtodos en una clase base y reemplazarlos con nuevas implementaciones en clases derivadas. Por ejemplo, podra definir una clase, BaseTax, que proporciona la funcionalidad bsica para calcular los impuestos sobre ventas en un estado. Las clases derivadas de BaseTax, como CountyTax o CityTax, podran implementar mtodos como CalculateTax segn las necesidades. El polimorfismo se deriva del hecho de que se podra llamar al mtodo CalculateTax de un objeto perteneciente a cualquier clase derivada de BaseTax, sin saber a qu clase perteneca el objeto. El procedimiento TestPoly del siguiente ejemplo muestra el polimorfismo basado en la herencia: Visual Basic Copiar cdigo

' %5.3 State tax Const StateRate As Double = 0.053 ' %2.8 City tax Const CityRate As Double = 0.028 Public Class BaseTax Overridable Function CalculateTax(ByVal Amount As Double) As Double ' Calculate state tax. Return Amount * StateRate End Function End Class

Public Class CityTax ' This method calls a method in the base class ' and modifies the returned value.

Inherits BaseTax Private BaseAmount As Double Overrides Function CalculateTax(ByVal Amount As Double) As Double ' Some cities apply a tax to the total cost of purchases, ' including other taxes. BaseAmount = MyBase.CalculateTax(Amount) Return CityRate * (BaseAmount + Amount) + BaseAmount End Function End Class

Sub TestPoly() Dim Item1 As New BaseTax Dim Item2 As New CityTax ' $22.74 normal purchase. ShowTax(Item1, 22.74) ' $22.74 city purchase. ShowTax(Item2, 22.74) End Sub

Sub ShowTax(ByVal Item As BaseTax, ByVal SaleAmount As Double) ' Item is declared as BaseTax, but you can ' pass an item of type CityTax instead. Dim TaxAmount As Double TaxAmount = Item.CalculateTax(SaleAmount) MsgBox("The tax is: " & Format(TaxAmount, "C")) End Sub

En este ejemplo, el procedimiento ShowTax acepta un parmetro denominado Item de tipo BaseTax, pero tambin puede pasar cualquiera de las clases derivadas de la clase BaseTax, como CityTax. La ventaja de este diseo es que se pueden agregar nuevas clases derivadas de la clase BaseTax sin cambiar el cdigo cliente en el procedimiento ShowTax. Gua de programacin de Visual Basic

Polimorfismo basado en la interfaz


Las interfaces proporcionan otro mtodo de conseguir el polimorfismo en Visual Basic. Las interfaces describen propiedades y mtodos como clases, pero a diferencia de stas, no pueden proporcionar ninguna implementacin. Las interfaces mltiples tienen la ventaja de permitir la evolucin de los sistemas de componentes de software sin interrumpir el cdigo existente. Para conseguir el polimorfismo con interfaces, se implementa una interfaz de diferentes formas en varias clases distintas. Las aplicaciones cliente pueden utilizar la implementacin nueva o la antigua, exactamente de la misma manera. La ventaja del polimorfismo basado en interfaz es que no es necesario volver a compilar aplicaciones cliente existentes para que funcionen con nuevas implementaciones de interfaz.

El siguiente ejemplo define una interfaz denominada Shape2 que se implementa en una clase denominada RightTriangleClass2 y RectangleClass2. Un mtodo denominado ProcessShape2 llama al mtodo de instancias CalculateArea de RightTriangleClass2 o RectangleClass2: Visual Basic Copiar cdigo

Sub TestInterface() Dim RectangleObject2 As New RectangleClass2 Dim RightTriangleObject2 As New RightTriangleClass2 ProcessShape2(RightTriangleObject2, 3, 14) ProcessShape2(RectangleObject2, 3, 5) End Sub

Sub ProcessShape2(ByVal Shape2 As Shape2, ByVal X As Double, _ ByVal Y As Double) MsgBox("The area of the object is " _ & Shape2.CalculateArea(X, Y)) End Sub

Public Interface Shape2 Function CalculateArea(ByVal X As Double, ByVal Y As Double) As Double End Interface

Public Class RightTriangleClass2 Implements Shape2 Function CalculateArea(ByVal X As Double, _ ByVal Y As Double) As Double Implements Shape2.CalculateArea ' Calculate the area of a right triangle. Return 0.5 * (X * Y) End Function End Class

Public Class RectangleClass2 Implements Shape2 Function CalculateArea(ByVal X As Double, _ ByVal Y As Double) As Double Implements Shape2.CalculateArea ' Calculate the area of a rectangle. Return X * Y End Function End Class

Gua de programacin de C#

Clases y mtodos parciales (Gua de programacin de C#)


Es posible dividir la definicin de una es/library/0b0thckt(printer).aspx ] ,

clase [ http://msdn.microsoft.com/esestructura [ http://msdn.microsoft.com/eses/library/ah19swz4(printer).aspx ] , interfaz [ http://msdn.microsoft.com/eses/library/87d83y5b(printer).aspx ] o mtodo en dos o ms archivos de cdigo fuente. Cada archivo de cdigo fuente contiene una seccin de la definicin de tipos o mtodos, y todas las partes se combinan cuando se compila la aplicacin. Clases parciales Existen diversas situaciones en las que es conveniente dividir una definicin de clase:

Al trabajar en proyectos grandes, el hecho de dividir una clase en archivos independientes permite que varios programadores trabajen al mismo tiempo con ella.

Al trabajar con un cdigo fuente generado automticamente, se puede agregar el cdigo a la clase sin tener que volver a crear el archivo de cdigo fuente. Visual Studio utiliza este enfoque al crear formularios Windows Forms, cdigo contenedor de un servicio web, etc. Se puede crear cdigo que utilice estas clases sin tener que modificar el archivo creado por Visual Studio.

Para dividir una definicin de clase, utilice el modificador

partial [ http://msdn.microsoft.com/es-

es/library/wbx7zzdd(printer).aspx ] , como se muestra a continuacin: C#

Copiar cdigo
public partial class Employee { public void DoWork() { } }

public partial class Employee { public void GoToLunch() { } }

La palabra clave partial indica que otras partes de la clase, estructura o interfaz se pueden definir en el espacio de nombres. Todas las partes deben utilizar la palabra clave partial. Todas las partes deben

estar disponibles en tiempo de compilacin para formar el tipo final. Todas las partes deben tener la misma accesibilidad, ya sea public, private, etc. Si alguna parte se declara abstracta, todo el tipo se considera abstracto. Si alguna parte se declara sealed, todo el tipo se considera sealed. Si alguna parte declara un tipo base, todo el tipo hereda esa clase. Todas las partes que especifican una clase base deben concordar, pero las partes que omiten una clase base heredan igualmente el tipo base. Las partes pueden especificar diferentes interfaces base, pero el tipo final implementa todas las interfaces mostradas por todas las declaraciones parciales. Cualquier miembro de clase, estructura o interfaz declarado en una definicin parcial est disponible para todas las dems partes. El tipo final es la combinacin de todas las partes en tiempo de compilacin. Nota: El modificador partial no est disponible en declaraciones de delegado o enumeracin.

El siguiente ejemplo muestra que los tipos anidados pueden ser parciales, aunque el tipo en el que estn anidados no sea propiamente parcial. C#

Copiar cdigo
class Container { partial class Nested { void Test() { } } partial class Nested { void Test2() { } } }

En tiempo de compilacin, se combinan los atributos de definiciones de tipo parcial. Por ejemplo, consideremos las siguientes declaraciones: C#

Copiar cdigo
[System.SerializableAttribute] partial class Moon { }

[System.ObsoleteAttribute]

partial class Moon { }

Son equivalentes a las declaraciones siguientes: C#

Copiar cdigo
[System.SerializableAttribute] [System.ObsoleteAttribute] class Moon { }

Los siguientes elementos se combinan a partir de todas las definiciones de tipo parcial:

comentarios XML interfaces atributos de parmetro de tipo genrico atributos de clase miembros

Por ejemplo, consideremos las siguientes declaraciones: C#

Copiar cdigo
partial class Earth : Planet, IRotate { } partial class Earth : IRevolve { }

Son equivalentes a las declaraciones siguientes: C#

Copiar cdigo
class Earth : Planet, IRotate, IRevolve { }

Restricciones Existen varias reglas que se deben seguir al trabajar con definiciones de clase parciales:

Todas las definiciones de tipo parcial creadas para ser parte del mismo tipo deben modificarse con partial. Por ejemplo, las siguientes declaraciones de clase generan un error: C#

Copiar cdigo
public partial class A { } //public class A { } // Error, must also be marked partial

El modificador partial slo puede aparecer inmediatamente antes de las palabras clave class, struct o interface.

Se permiten tipos parciales anidados en definiciones de tipo parcial, como se muestra en el siguiente ejemplo: C#

Copiar cdigo
partial class ClassWithNestedClass { partial class NestedClass { } }

partial class ClassWithNestedClass { partial class NestedClass { } }

Todas las definiciones de tipo parcial que deben ser parte del mismo tipo deben definirse en el mismo ensamblado y el mismo mdulo (archivo .exe o .dll). Las definiciones parciales no pueden abarcar varios mdulos.

Los parmetros de nombre de clase y tipo genrico deben coincidir en todas las definiciones de tipo parcial. Los tipos genricos pueden ser parciales. Todas las declaraciones parciales deben utilizar los mismos nombres de parmetro en el mismo orden.

Las siguientes palabras clave en una definicin de tipo parcial son opcionales, pero si hay alguna en una definicin de tipo parcial, no puede entrar en conflicto con las palabras clave especificadas en otra definicin parcial para el mismo tipo:

public [ http://msdn.microsoft.com/es-es/library/yzh058ae(printer).aspx ] private [ http://msdn.microsoft.com/es-es/library/st6sy9xe(printer).aspx ]

protected [ http://msdn.microsoft.com/es-es/library/bcd5672a(printer).aspx ] internal [ http://msdn.microsoft.com/es-es/library/7c5ka91b(printer).aspx ] abstract [ http://msdn.microsoft.com/es-es/library/sf985hc5(printer).aspx ] sealed [ http://msdn.microsoft.com/es-es/library/88c54tsw(printer).aspx ]


clase base modificador anidadas)

new [ http://msdn.microsoft.com/es-es/library/51y09td4(printer).aspx ] (partes

restricciones genricas Para obtener ms informacin, vea

Restricciones de tipos de parmetros (Gua de

programacin de C#) [ http://msdn.microsoft.com/es-es/library/d5x73970(printer).aspx ] .


Ejemplo 1 Description En el siguiente ejemplo, los campos y el constructor de la clase, CoOrds, se declaran en una definicin de clase parcial, mientras que el miembro PrintCoOrds se declara en otra definicin de clase parcial. Cdigo C#

Copiar cdigo
public partial class CoOrds { private int x; private int y;

public CoOrds(int x, int y) { this.x = x; this.y = y; } }

public partial class CoOrds { public void PrintCoOrds()

{ System.Console.WriteLine("CoOrds: {0},{1}", x, y); }

class TestCoOrds { static void Main() { CoOrds myCoOrds = new CoOrds(10, 15); myCoOrds.PrintCoOrds(); } }

Resultado CoOrds: 10,15 Ejemplo 2 Description El siguiente ejemplo muestra que tambin se pueden desarrollar estructuras e interfaces parciales. Cdigo C#

Copiar cdigo
partial interface ITest { void Interface_Test(); }

partial interface ITest { void Interface_Test2(); }

partial struct S1 {

void Struct_Test() { } }

partial struct S1 { void Struct_Test2() { } }

Mtodos parciales Una clase o estructura parcial puede contener un mtodo parcial. Una parte de la clase contiene la firma del mtodo. Una implementacin opcional se puede definir en la misma parte u otra parte. Si no se proporciona la implementacin, el mtodo y todas las llamadas a l se eliminan en tiempo de compilacin. Los mtodos parciales permiten al implementador de una parte de una clase definir un mtodo, de forma similar a un evento. El implementador de la otra parte de la clase puede decidir si implementar el mtodo o no. Si no se implementa el mtodo, el compilador quita la firma del mtodo y todas las llamadas al mtodo. Por consiguiente, cualquier cdigo en la clase parcial puede utilizar libremente un mtodo parcial, aun cuando no se proporcione la implementacin. No se producir ningn error en tiempo de compilacin o en tiempo de ejecucin si se realizan llamadas al mtodo y ste no est implementado. Los mtodos parciales son especialmente tiles como una manera de personalizar el cdigo generado. Permiten reservar un nombre y una firma de mtodo, de modo que el cdigo generado pueda llamar al mtodo y el programador pueda decidir si lo implementa o no. De forma muy similar a las clases parciales, los mtodos parciales permiten que el cdigo creado por un generador de cdigo y el cdigo creado por un programador humano puedan funcionar juntos sin costes en tiempo de ejecucin. Una declaracin de mtodo parcial consta de dos partes: la definicin y la implementacin. stas pueden estar en partes independientes de una clase parcial o en la misma parte. Si no existe ninguna declaracin de implementacin, el compilador quita la declaracin de definicin y todas las llamadas al mtodo.

Copiar cdigo
// Definition in file1.cs partial void onNameChanged();

// Implementation in file2.cs partial void onNameChanged() { // method body }

Las declaraciones de mtodo parciales deben comenzar con la palabra clave contextual

partial [

http://msdn.microsoft.com/es-es/library/wbx7zzdd(printer).aspx ] , y el mtodo debe devolver

void [ http://msdn.microsoft.com/es-es/library/yah0tteb(printer).aspx ] .

Los mtodos parciales pueden tener parmetros es/library/14akc2c7(printer).aspx ] , pero no es/library/t3c3bfhx(printer).aspx ] .

ref [ http://msdn.microsoft.com/es-

out [ http://msdn.microsoft.com/es-

Los mtodos parciales son implcitamente

private [ http://msdn.microsoft.com/esvirtual [

es/library/st6sy9xe(printer).aspx ] y, por consiguiente, no pueden ser http://msdn.microsoft.com/es-es/library/9fkccyh4(printer).aspx ] .

Los mtodos parciales no pueden ser

extern [ http://msdn.microsoft.com/es-

es/library/e59b22c5(printer).aspx ] , porque la presencia del cuerpo determina si son de definicin o de implementacin.

Los mtodos parciales pueden tener modificadores es/library/98f28cdx(printer).aspx ] y es/library/chfa2zb8(printer).aspx ] .

static [ http://msdn.microsoft.com/es-

unsafe [ http://msdn.microsoft.com/es-

Los mtodos parciales pueden ser genricos. Las restricciones se colocan en la declaracin de mtodo parcial que realiza la definicin, y se pueden repetir opcionalmente en la parte de implementacin. Los nombres de parmetros y parmetros de tipo no tienen que ser iguales en la declaracin que realiza la implementacin y en la que realiza la definicin.

No se puede crear un

delegado [ http://msdn.microsoft.com/es-

es/library/900fyy8e(printer).aspx ] para un mtodo parcial. Especificacin del lenguaje C# Para obtener ms informacin, vea las siguientes secciones de

Especificacin del lenguaje C# [

http://msdn.microsoft.com/es-es/library/ms228593(printer).aspx ] .

10,2 tipos parciales Vea tambin

Conceptos

Gua de programacin de C# [ http://msdn.microsoft.com/es-es/library/67ef8sbd(printer).aspx ] Clases (Gua de programacin de C#) [ http://msdn.microsoft.com/eses/library/x9afc042(printer).aspx ]

Estructuras (Gua de programacin de C#) [ http://msdn.microsoft.com/eses/library/saxz13w4(printer).aspx ]

Interfaces (Gua de programacin de C#) [ http://msdn.microsoft.com/eses/library/ms173156(printer).aspx ]

Tipo parcial (Referencia de C#) [ http://msdn.microsoft.com/es-es/library/wbx7zzdd(printer).aspx ]


Gua de programacin de Visual Basic

Programacin orientada a objetos en Visual Basic


Los objetos son el elemento central de la programacin en Visual Basic. Los formularios y controles son objetos. Las bases de datos son objetos. Si ha usado Visual Basic durante algn tiempo, o si ha trabajado con los ejemplos de la documentacin, ya ha programado con objetos, pero hay mucho ms en lo que se refiere a objetos de lo que ha visto hasta aqu. En los siguientes temas, ver lo fcil que resulta crear objetos propios a partir de las clases que defina, as como utilizar objetos para simplificar la creacin de cdigo y aumentar su reutilizacin. En esta seccin Introduccin a los objetos en Visual Basic [ http://msdn.microsoft.com/esmx/library/zztsbwsx(printer).aspx ] Proporciona una introduccin a los trminos y conceptos utilizados en la programacin orientada a objetos. Enlace en tiempo de compilacin y en tiempo de ejecucin [ http://msdn.microsoft.com/esmx/library/0tcf61s1(printer).aspx ] Describe los enlaces, que realiza el compilador cuando se asigna un objeto a una variable de objeto, y las diferencias entre los objetos con enlaces en tiempo de compilacin y en tiempo de ejecucin. Miembros compartidos en Visual Basic [ http://msdn.microsoft.com/esmx/library/4hbsxy95(printer).aspx ] Describe los miembros que se pueden utilizar sin instancias. Crear y utilizar objetos [ http://msdn.microsoft.com/es-mx/library/wawheh00(printer).aspx ] Muestra cmo crear y utilizar instancias de clases. Administrar grupos de objetos [ http://msdn.microsoft.com/es-mx/library/495te598(printer).aspx ] Proporciona tcnicas para trabajar con matrices y colecciones de objetos. Obtener informacin de clases en tiempo de ejecucin [ http://msdn.microsoft.com/esmx/library/80z6k8st(printer).aspx ] Muestra cmo determinar la clase a la que pertenece un objeto. Descripcin de las clases [ http://msdn.microsoft.com/es-mx/library/ca22fyhc(printer).aspx ] Explica la creacin y duracin de objetos en un procedimiento paso a paso. Eventos en Visual Basic [ http://msdn.microsoft.com/es-mx/library/ms172877(printer).aspx ] Muestra cmo declarar y utilizar eventos. Delegados de Visual Basic [ http://msdn.microsoft.com/es-mx/library/ms172879(printer).aspx ] Muestra cmo declarar y utilizar delegados. Interfaces en Visual Basic [ http://msdn.microsoft.com/es-mx/library/28e2e18x(printer).aspx ] Describe qu son las interfaces y cmo pueden utilizarse en las aplicaciones. Herencia en Visual Basic [ http://msdn.microsoft.com/es-mx/library/5x4yd9d5(printer).aspx ] Describe cmo definir clases que sirvan como base para otras clases. Secciones relacionadas Objetos en Visual Basic [ http://msdn.microsoft.com/es-mx/library/tyd4tfw8(printer).aspx ] Describe qu son los objetos y cmo se utilizan. Programar con componentes [ http://msdn.microsoft.com/es-mx/library/0ffkdtkf(printer).aspx ] Muestra cmo se puede usar Visual Basic para controlar objetos proporcionados por otras aplicaciones. Gua de programacin de Visual Basic

Cmo: Crear e implementar interfaces

Como se explica en Informacin general sobre interfaces [ http://msdn.microsoft.com/eses/library/s3et34z3(printer).aspx ] , las interfaces describen las propiedades, mtodos y eventos de una clase sin proporcionar ninguna implementacin.

Para crear una interfaz


1. Defina la interfaz agregndole cdigo, de tal forma que empiece con la palabra clave Interface y el nombre de la interfaz, y que acabe con la instruccin End Interface. Por ejemplo, el siguiente cdigo define una interfaz denominada IAsset. Visual Basic Copiar cdigo

Interface IAsset End Interface

2.

Agregue instrucciones que definan las propiedades, mtodos y eventos que sean compatibles con la interfaz. Por ejemplo, el siguiente cdigo define una funcin, una propiedad y un evento. Visual Basic Copiar cdigo

Interface IAsset Event ComittedChange(ByVal Success As Boolean) Property Division() As String Function GetID() As Integer End Interface

Para implementar una interfaz


1. Si la interfaz que est implementando no forma parte del proyecto, agregue una referencia al ensamblado que contiene la interfaz. 2. Cree una clase nueva que implemente la interfaz, e incluya la palabra clave Implements en la lnea que sigue al nombre de clase. Por ejemplo, para implementar la interfaz IAsset, podra darle a la clase de implementacin el nombre Computer, como en el cdigo siguiente. Visual Basic Copiar cdigo

Class Computer Implements IAsset

End Class

3.

Agregue procedimientos para implementar las propiedades, mtodos y eventos de la clase como en el cdigo siguiente, que se basa en el ejemplo del paso anterior: Visual Basic Copiar cdigo

Class Computer Implements IAsset

Public Event ComittedChange(ByVal Success As Boolean) _ Implements IAsset.ComittedChange

Private divisionValue As String

Public Property Division() As String _ Implements IAsset.Division

Get Return divisionValue End Get Set(ByVal value As String) divisionValue = value RaiseEvent ComittedChange(True) End Set End Property

Private IDValue As Integer

Public Function GetID() As Integer _ Implements IAsset.GetID

Return IDValue

End Function

Public Sub New(ByVal Division As String, ByVal ID As Integer) Me.divisionValue = Division Me.IDValue = ID End Sub End Class

Vea tambin

Gua de programacin de Visual Basic

Tutorial: Crear e implementar interfaces


Las interfaces describen las caractersticas de las propiedades, los mtodos y los eventos, pero dejan los detalles de la implementacin para las estructuras o clases. Este tutorial explica cmo declarar e implementar una interfaz. Nota: Los cuadros de dilogo y los comandos de men que se ven pueden diferir de los descritos en la Ayuda, dependiendo de los valores de configuracin o de edicin activos. Para cambiar la configuracin, seleccione Importar y exportar configuraciones en el men Herramientas. Para obtener ms informacin, vea Valores de configuracin de Visual Studio [ http://msdn.microsoft.com/es-es/library/zbhkx167(printer).aspx ] .

Para definir una interfaz


1. 2. Abra un nuevo proyecto Aplicacin para Windows de Visual Basic. Agregue un mdulo nuevo al proyecto haciendo clic en Agregar mdulo en el men Proyecto. 3. Asigne al mdulo el nombre Module1.vb y haga clic en Agregar. Aparecer el cdigo del mdulo nuevo. 4. Defina una interfaz con el nombre TestInterface dentro de Module1; para ello, escriba Interface TestInterface entre las instrucciones Module y End Module y presione ENTRAR. El Editor de cdigo aplica una sangra delante de la palabra clave Interface y agrega una instruccin End Interface para formar un bloque de cdigo. 5. Defina una propiedad, un mtodo y un evento para la interfaz; para ello, site el siguiente cdigo entre las instrucciones Interface y End Interface: Visual Basic Copiar cdigo

Property Prop1() As Integer Sub Method1(ByVal X As Integer) Event Event1()

Implementacin Puede notar que la sintaxis utilizada para declarar los miembros de la interfaz es diferente de la sintaxis utilizada para declarar los miembros de la clase. Esta diferencia refleja el hecho de que las interfaces no pueden contener cdigo de implementacin.

Para implementar la interfaz


1. Agregue una clase denominada ImplementationClass; para ello, agregue la siguiente instruccin a Module1 despus de la instruccin End Interface pero antes de la instruccin End Module y, a continuacin, presione ENTRAR: Visual Basic Copiar cdigo

Class ImplementationClass

Si est trabajando dentro del entorno de desarrollo integrado, el Editor de cdigo proporciona la instruccin End Class correspondiente al presionar ENTRAR. 2. Agregue la siguiente instruccin Implements a ImplementationClass, que da nombre a la interfaz que implementa la clase: Visual Basic Copiar cdigo

Implements TestInterface

Cuando se muestra separada de otros elementos en la parte superior de la clase o estructura, la instruccin Implements indica que la clase o estructura implementa una interfaz. Si est trabajando dentro del entorno de desarrollo integrado, el Editor de cdigo implementa los miembros de clase requeridos por TestInterface al presionar ENTRAR, y se puede omitir el paso siguiente. 3. Si no est trabajando dentro del entorno de desarrollo integrado, debe implementar todos los miembros de la interfaz MyInterface. Agregue el cdigo siguiente a ImplementationClass para implementar Event1, Method1 y Prop1: Visual Basic

Copiar cdigo

Event Event1() Implements TestInterface.Event1

Public Sub Method1(ByVal X As Integer) Implements TestInterface.Method1 End Sub

Public Property Prop1() As Integer Implements TestInterface.Prop1 Get End Get Set(ByVal value As Integer) End Set End Property

La instruccin Implements asigna un nombre a la interfaz y al miembro de la interfaz que se est implementando. 4. Para finalizar la definicin de Prop1, agregue un campo privado a la clase que almacen el valor de la propiedad: Visual Basic Copiar cdigo

' Holds the value of the property. Private pval As Integer

Devuelva el valor de pval desde el descriptor de acceso get de la propiedad. Visual Basic Copiar cdigo

Return pval

Establezca el valor de pval en el descriptor de acceso set de la propiedad. Visual Basic Copiar cdigo

pval = value

5.

Para finalizar la definicin de Method1, agregue el cdigo siguiente: Visual Basic Copiar cdigo

MsgBox("The X parameter for Method1 is " & X) RaiseEvent Event1()

Para probar la implementacin de la interfaz


1. Haga clic con el botn secundario del mouse (ratn) en el formulario de inicio del proyecto en el Explorador de soluciones y haga clic en Ver cdigo. El editor mostrar la clase del formulario de inicio. De manera predeterminada, el formulario de inicio se denomina Form1. 2. Agregue el siguiente campo testInstance a la clase Form1: Visual Basic Copiar cdigo

Dim WithEvents testInstance As TestInterface

Al declarar testInstance como WithEvents, la clase Form1 puede controlar sus eventos. 3. Agregue el siguiente controlador de eventos a la clase Form1 para controlar los eventos desencadenados por testInstance: Visual Basic Copiar cdigo

Sub EventHandler() Handles testInstance.Event1 MsgBox("The event handler caught the event.") End Sub

4.

Agregue una subrutina denominada Test a la clase Form1 para probar la clase de implementacin: Visual Basic

Copiar cdigo

Sub Test() ' Create an instance of the class.

Dim T As New ImplementationClass ' Assign the class instance to the interface. ' Calls to the interface members are ' executed through the class instance. testInstance = T ' Set a property. testInstance.Prop1 = 9 ' Read the property. MsgBox("Prop1 was set to " & testInstance.Prop1) ' Test the method and raise an event.

testInstance.Method1(5) End Sub

El procedimiento Test crea una instancia de la clase que implementa MyInterface, asigna esa instancia al campo testInstance, define una propiedad y ejecuta un mtodo a travs de la interfaz. 5. Agregue cdigo para llamar al procedimiento Test desde el procedimiento Form1 Load del formulario de inicio: Visual Basic Copiar cdigo

Private Sub Form1_Load(ByVal sender As System.Object, _ ByVal e As System.EventArgs) _ Handles MyBase.Load Test() ' Test the class. End Sub

6.

Ejecute el procedimiento Test presionando F5. Aparecer el mensaje "Prop1 se ha definido como 9". Tras hacer clic en Aceptar, aparecer el mensaje "El parmetro X de Method1 es 5". Al hacer clic en Aceptar, aparecer el mensaje "El controlador de eventos ha interceptado el evento".

Se pueden heredar los constructores? 1 - Si. La clase derivada tiene acceso sin nigun problema al constructor de la clase base 2 - No. Es necesario declarar de manera explicita el constructor en la clase derivada. 3 - Si. Siempre y cuando el contructor de la clase base no este sobrecargado 4 - Si. Siempre y cuando el constructor sea de tipo Public
Un requerimiento de su compania es implementar una clase llamada InicioSesion, dicha clase pertenece al espacio de Nombres Usuario. Le solicitan que los elementos declarados dentro de esta clase puedan ser accedidos por la misma clase y por cualquier clase del espacio de Nombres Usuario, pero ni la clase ni los elementos de ella pueden ser vistos desde otros espacios de nombres. Cual es la solucion indicada? 1 - Declaro los elementos de la clase InicioSesion de tipo public, y la clase de tipo Private 2 - Declaro los elementos de la clase InicioSesion de tipo Friend (Internal), y la clase de tipo Private 3 - Declaro los elementos de la clase InicioSesion de tipo Protected, y la clase de tipo Private 4 - Declaro los elementos de la clase InicioSesion de tipo Friend (Internal), y la clase de tipo Public

Anda mungkin juga menyukai