Buscar..


Definiendo una clase

Las clases son aspectos vitales de la POO. Una clase es como el "plano" de un objeto. Un objeto tiene las propiedades de una clase, pero las características no están definidas dentro de la misma clase. Como cada objeto puede ser diferente, definen sus propias características.

Public Class Person
End Class
 
Public Class Customer
End Class

Una clase también puede contener subclases . Una subclase hereda las mismas propiedades y comportamientos que su clase primaria, pero puede tener sus propias propiedades y clases únicas.

Modificadores de herencia (en clases)

Hereda

Especifica la clase base (o padre)

Public Class Person
End Class

Public Class Customer
    Inherits Person

End Class

'One line notation
Public Class Student : Inherits Person
End Class

Posibles objetos:

Dim p As New Person
Dim c As New Customer
Dim s As New Student

No Heredable

Evita que los programadores utilicen la clase como clase base.

Public NotInheritable Class Person
End Class

Posibles objetos:

Dim p As New Person

Debe Heredarse

Especifica que la clase está destinada para ser utilizada como una clase base solamente. (Clase abstracta)

Public MustInherit Class Person
End Class

Public Class Customer
    Inherits Person
End Class

Posibles objetos:

Dim c As New Customer

Modificadores de herencia (en propiedades y métodos)

Anulable

Permite que una propiedad o un método en una clase se invalide en una clase derivada.

Public Class Person
    Public Overridable Sub DoSomething()
        Console.WriteLine("Person")
    End Sub
End Class

Anulaciones

Anula una propiedad o un método anulable definido en la clase base.

Public Class Customer
    Inherits Person

    'Base Class must be Overridable
    Public Overrides Sub DoSomething()
        Console.WriteLine("Customer")
    End Sub
End Class

NotOverridable

Evita que una propiedad o un método se sobrescriba en una clase heredada. Comportamiento por defecto. Solo se puede declarar en métodos de anulaciones

Public Class Person

    Public Overridable Sub DoSomething()
        Console.WriteLine("Person")
    End Sub

End Class

Public Class Customer
    Inherits Person

    Public NotOverridable Overrides Sub DoSomething()
        Console.WriteLine("Customer")
    End Sub

End Class

Public Class DetailedCustomer
    Inherits Customer

    'DoSomething can't be overridden
End Class

Ejemplo de uso:

Dim p As New Person
p.DoSomething()

Dim c As New Customer
c.DoSomething()

Dim d As New DetailedCustomer
d.DoSomething()

Salida:

Person
Customer
Customer

MustOverride

Requiere que una clase derivada anule la propiedad o el método.

Los métodos MustOverride se deben declarar en las clases MustInherit.

Public MustInherit Class Person

    Public MustOverride Sub DoSomething()
    'No method definition here

End Class

Public Class Customer
    Inherits Person

    'DoSomething must be overridden
    Public Overrides Sub DoSomething()
        Console.WriteLine("Customer")
    End Sub

End Class

Ejemplo de uso:

Dim c As New Customer
c.DoSomething()

Salida:

Customer

MyBase

La palabra clave MyBase se comporta como una variable de objeto que se refiere a la clase base de la instancia actual de una clase.

Public Class Person
    Public Sub DoSomething()
        Console.WriteLine("Person")
    End Sub
End Class

Public Class Customer
    Inherits Person

    Public Sub DoSomethingElse()
        MyBase.DoSomething()
    End Sub

End Class

Ejemplo de uso:

Dim p As New Person
p.DoSomething()

Console.WriteLine("----")

Dim c As New Customer
c.DoSomething()
c.DoSomethingElse()

Salida:

Person
----
Person
Person

Yo vs myclass

Yo usa la instancia de objeto actual.

MyClass usa la definición de miembro en la clase donde se llama al miembro

Class Person
    Public Overridable Sub DoSomething()
        Console.WriteLine("Person")
    End Sub

    Public Sub useMe()
        Me.DoSomething()
    End Sub

    Public Sub useMyClass()
        MyClass.DoSomething()
    End Sub
End Class

Class Customer
    Inherits Person

    Public Overrides Sub DoSomething()
        Console.WriteLine("Customer")
    End Sub
End Class

Ejemplo de uso:

Dim c As New Customer
c.useMe()
c.useMyClass()

Salida:

Customer
Person

Sobrecarga

La sobrecarga es la creación de más de un procedimiento, constructor de instancia o propiedad en una clase con el mismo nombre pero diferentes tipos de argumentos.

Class Person
    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

    Overloads Sub Display(ByVal theDouble As Double)
        ' Add code that displays Double data.
    End Sub
End Class

Oscuridad

Se vuelve a declarar un miembro que no es anulable. Sólo se verán afectadas las llamadas a la instancia. El código dentro de las clases base no se verá afectado por esto.

Public Class Person
    Public Sub DoSomething()
        Console.WriteLine("Person")
    End Sub


    Public Sub UseMe()
        Me.DoSomething()
    End Sub
End Class
Public Class Customer
    Inherits Person
    Public Shadows Sub DoSomething()
        Console.WriteLine("Customer")
    End Sub

End Class

Ejemplo de uso:

Dim p As New Person
Dim c As New Customer
p.UseMe()
c.UseMe()
Console.WriteLine("----")
p.DoSomething()
c.DoSomething()

Salida:

Person
Person
----
Person
Customer

Escollos :

Ejemplo 1, Creando un nuevo objeto a través de un genérico. ¿Qué función se utilizará?

Public Sub CreateAndDoSomething(Of T As {Person, New})()
    Dim obj As New T
    obj.DoSomething()
End Sub

ejemplo de uso:

Dim p As New Person
p.DoSomething()
Dim s As New Student
s.DoSomething()
Console.WriteLine("----")
CreateAndDoSomething(Of Person)()
CreateAndDoSomething(Of Student)()

Salida: Por intuición el resultado debe ser el mismo. Sin embargo, eso no es cierto.

Person
Student
----
Person
Person

Ejemplo 2:

Dim p As Person
Dim s As New Student
p = s
p.DoSomething()
s.DoSomething()

Salida: Por intuición, podrías pensar que p y s son iguales y se comportarán igual. Sin embargo, eso no es cierto.

Person
Student

En estos simples ejemplos, es fácil aprender el extraño comportamiento de las Sombras. Pero en la vida real trae muchas sorpresas. Es aconsejable evitar el uso de sombras. Uno debería usar otras alternativas tanto como sea posible (anulaciones, etc.)

Interfaces

Public Interface IPerson
    Sub DoSomething()
End Interface

Public Class Customer
    Implements IPerson
    Public Sub DoSomething() Implements IPerson.DoSomething
        Console.WriteLine("Customer")
    End Sub

End Class


Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow