Hola.
Me da la sensación de que no tienes del todo claro el concepto de
Polimorfismo. El
Polimorfismo no tiene nada que ver con poder usar o no poder usar ifs/condicionales, eso sería en la parte de la implementación y por supuesto puedes usar lo que te venga en gana para desarrollar y resolver la lógica/algoritmo de la implementación...
El
Polimorfismo simplemente se refiere a la capacidad de poder variar la implementación de un método o propiedad, de tal forma que, en una derivación de clase con un método o propiedad que haya sido heredado de la clase base, dicho método podrá ser invalidado (
overriden) para poder realizar diferentes acciones dependiendo del tipo de objeto que se le envie.
En resumen, podemos referirnos al
Polimorfismo como derivaciones de clases que representan un mismo elemento base (ej. clase base '
Animal', derivación '
Perro' y derivación '
Gato') pero difieren en la implementación de sus métodos o propiedades heredadas.
El
Polimorfismo solamente se aplica a métodos o propiedades que hayan sido declarados con el keyword
Overridable, es decir el término
Overridable en
.NET equivale a decir
Polimorfismo, es lo mismo, y todo lo demás son métodos o propiedades considerados invariantes (dicho de otra manera: no son polimorfos). Por ende, para empezar a hacer uso del
Polimorfismo simplemente se debe declarar una clase base con miembros (métodos o propiedades)
overridables, luego heredar esa clase e invalidar (
override) el método polimorfo/
overridable para modificar su implementación y con ello su comportamiento en función al tipo de argumento que le pasemos al método.
Por ejemplo, al aplicar el
Polimorfismo lo hariamos con la idea de representar un número con una clase llamada "
NumeroBase", un número entero con una clase derivada y llamada "
NumeroInt" y un número decimal con otra clase derivada y llamada "
NumeroDec". En esencia, ambas derivaciones representan lo mismo, un número, así que la clase "
NumeroBase" debería ser capaz de representar ambos tipos de números y llevar a cabo el mismo tipo de acciones que sus derivaciones (aunque hacerlo es opcional, no se debe considerar como una regla estricta al seguir las directrices de diseño de la implementación del
Polimorfismo). "
NumeroInt" y "
NumeroDec" simplemente ampliarian la implementación de "
NumeroBase" (gracias al
Polimorfismo) para tratar distintos tipos de números con sus respectivas...diferencias (las diferencias que hagan singular a un número entero, o a un número decimal).
Un ejemplo muy breve y sencillo (extraido de la MSDN) para ayudar a entender el
Polimorfismo:
MustInherit Public Class Shape
Public MustOverride Sub Paint(g As Graphics, r As Rectangle)
End Class
Public Class Ellipse : Inherits Shape
Public Overrides Sub Paint(g As Graphics, r As Rectangle)
g.drawEllipse(r)
End Sub
End Class
Public Class Box : Inherits Shape
Public Overrides Sub Paint(g As Graphics, r As Rectangle)
g.drawRect(r)
End Sub
End Class
Existen muchas formas o visión de ideas para implementar tu ejercicio, y habría que analizar bien los detalles expuestos en el ejercicio para saber exactamente lo que pide hacer e idear la forma óptima de hacerlo. Yo me limitaré a mostrarte este ejemplo que he escrito en
VB.NET haciendo uso del
Polimorfismo y
Generics que puedes adaptar o extender según tus necesidades. Si el ejercicio es en C#, entonces puedes usar cualqueir conversor online de C# <> VB.NEt, como por ejemplo
http://converter.telerik.com/Public MustInherit Class Number(Of T)
Public MustOverride Property Value As T
Public MustOverride Function Sum(ByVal value As T) As T
End Class
' Número de tipo entero...
Public NotInheritable Class NumberInt : Inherits Number(Of Integer)
Public Overrides Property Value As Integer
Public Sub New(ByVal value As Integer)
Me.Value = value
End Sub
Public Overrides Function Sum(ByVal value As Integer) As Integer
Return (Me.Value + value)
End Function
End Class
' Número de tipo decimal...
Public NotInheritable Class NumberDec : Inherits Number(Of Decimal)
Public Overrides Property Value As Decimal
Private Sub New()
End Sub
Public Sub New(ByVal value As Decimal)
Me.Value = value
End Sub
Public Overrides Function Sum(ByVal value As Decimal) As Decimal
Return (Me.Value + value)
End Function
End Class
' Número de cualquier tipo...
Public NotInheritable Class Number : Inherits Number(Of IConvertible)
Public Overrides Property Value As IConvertible
Public Sub New(ByVal value As IConvertible)
If Not Me.IsNumericTypeCode(value) Then
Throw New ArgumentException("Bad numeric typecode.", "value")
End If
Me.Value = value
End Sub
Public Overrides Function Sum(ByVal value As IConvertible) As IConvertible
Return (Me.Value.ToDecimal(CultureInfo.CurrentCulture) + value.ToDecimal(CultureInfo.CurrentCulture))
End Function
Public Function ToInt32() As NumberInt
Return New NumberInt(Me.Value.ToInt32(CultureInfo.CurrentCulture))
End Function
Public Function ToDecimal() As NumberDec
Return New NumberDec(Me.Value.ToDecimal(CultureInfo.CurrentCulture))
End Function
Private Function IsNumericTypeCode(ByVal value As IConvertible) As Boolean
Select Case value.GetTypeCode
Case TypeCode.SByte, TypeCode.Byte, TypeCode.Int16, TypeCode.UInt16,
TypeCode.Int32, TypeCode.UInt32, TypeCode.Int64, TypeCode.UInt64,
TypeCode.Single, TypeCode.Double, TypeCode.Decimal
Return True
Case Else
Return False
End Select
End Function
End Class
Saludos.