Sei sulla pagina 1di 6

ESCUELA SUPERIOR POLITECNICA DE CHIMBORAZO

FACULTAD DE INFORMATICA Y ELECTRONICA


ESCUELA DE INGENIERIA ELECTRONICA EN CONTROL Y REDES
INDUSTRIALES
Integrantes:
Crsitian Pai
A
Jos Vera
490
Jonathan Coyago 486

564

Semestre: Tercero

CLASE VIRTUAL
La palabra clave virtual se utiliza para modificar un mtodo, propiedad,
indizador o declaracin de evento y permite invalidar cualquiera de estos
elementos en una clase derivada. En el siguiente ejemplo, cualquier clase que
hereda este mtodo puede reemplazarlo:
public virtual double Area()
{
return x * y;
}

La implementacin de un miembro virtual puede reemplazarse por un miembro


de reemplazo de una clase derivada.
Cuando se invoca un mtodo virtual, el tipo en tiempo de ejecucin del objeto
se comprueba para ver si existe un miembro de reemplazo. Se realiza una
llamada al miembro de reemplazo que est en la clase de mayor derivacin, el
cual puede ser el miembro original, si no existe ninguna clase derivada que
haya reemplazado el miembro.
De forma predeterminada, los mtodos son no virtuales. No se puede
reemplazar un mtodo no virtual.
No
puede
utilizar
el
modificador virtual con
los
modificadores static, abstract, private u override. En el ejemplo siguiente,
se muestra una propiedad virtual:
Las propiedades virtuales funcionan como los mtodos abstractos, salvo en lo
que se refiere a las diferencias en la sintaxis de las declaraciones e
invocaciones.
Es incorrecto utilizar el modificador virtual para una propiedad esttica.
Una propiedad virtual heredada se puede reemplazar en una clase
derivada si se incluye una declaracin de propiedad que use el
modificador override.
EJEMPLO:
namespace @virtual
{
class Program
{

class TestClass
{
public class Shape
{
public const double PI = Math.PI;
protected double x, y;
public Shape()
{
}
public Shape(double x, double y)
{
this.x = x;
this.y = y;
}

public virtual double Area()


{
return x * y;
}

public class Circulo : Shape


{
public Circulo(double r)
: base(r, 0)
{
}
public override double Area()
{
return PI * x * x;
}
}
class Esfera : Shape
{
public Esfera(double r)
: base(r, 0)
{
}

public override double Area()


{
return 4 * PI * x * x;
}

class Cilindro : Shape


{
public Cilindro(double r, double h)
: base(r, h)
{
}
public override double Area()

{
}

}
}

return 2 * PI * x * x + 2 * PI * x * y;

static void Main()


{
Console.Write("\nIngrese el Radio r: ");
double r = double.Parse(Console.ReadLine());
Console.Write("\nIngrese la Altura h: ");
double h = double.Parse(Console.ReadLine());
//double r = 3.0, h = 5.0;
Shape c = new Circulo(r);
Shape s = new Esfera(r);
Shape l = new Cilindro(r, h);
// Display results:
Console.WriteLine("\n\nArea del Circulo = {0:F2}", c.Area());
Console.WriteLine("\nArea de la Esfera = {0:F2}", s.Area());
Console.WriteLine("\nArea del Cilindro = {0:F2}", l.Area());
Console.ReadKey();
}

En este ejemplo, la clase Shape contiene las dos coordenadas x e y y el


mtodo
virtual Area(). Las
clases
de
las
diferentes
figuras,
como Crculo, Cilindro y Esfera, heredan la clase Shape, que permite calcular el
rea de la superficie de cada figura. Cada clase derivada dispone de su propia
implementacin de Area() (mtodo de reemplazo).
Observe que las clases heredadas Circulo, Cilindro y Esfera todos los
constructores de uso que inicialice la clase base, como se muestra en la
siguiente declaracin.
public Cilindror(double r, double h): base(r, h) {}
El siguiente programa calcula y muestra el rea apropiada para cada figura
invocando la implementacin adecuada del mtodo de Area() , como el objeto
que est asociado al mtodo.
CLASE ABSTRACT
El modificador abstract se puede utilizar con clases, mtodos, propiedades,
indizadores y eventos. Use el modificador abstract en una declaracin de
clase para indicar que la clase slo se puede utilizar como clase base de otras
clases. Los miembros que estn marcados como abstractos o que se incluyen
en una clase abstracta, deben ser implementados por clases derivadas de la
clase abstracta.
Las clases de tipo abstract presentan las siguientes caractersticas:

No se pueden crear instancias de una clase abstracta.

Una clase abstracta puede contener descriptores de acceso y mtodos


abstractos.

No se puede modificar una clase abstracta con el modificador sealed


(Referencia de C#) porque sealed impide que se herede la clase.

Una clase no abstracta derivada de una clase abstracta debe incluir


implementaciones reales de todos los descriptores de acceso y mtodos
abstractos heredados.

Utilice el modificador abstract en una declaracin de mtodo o propiedad para


indicar que el mtodo o la propiedad no contienen implementacin.
Los mtodos abstractos presentan las siguientes caractersticas:

Un mtodo abstracto es, implcitamente, un mtodo virtual.

Las declaraciones de mtodos abstractos slo se permiten en clases


abstractas.

Debido a que una declaracin de mtodo abstracto no proporciona una


implementacin, no existe cuerpo del mtodo; la declaracin de mtodo
finaliza simplemente con un punto y coma y sin llaves ({ }) despus de
la firma. Por ejemplo:

La implementacin la proporciona un mtodo de reemplazo override


(Referencia de C#), que es miembro de una clase no abstracta.

Utilizar los modificadores static o virtual en una declaracin de mtodo


abstracto produce un error.

Las propiedades abstractas funcionan como los mtodos abstractos, salvo las
diferencias en la sintaxis de las declaraciones y llamadas.

Es incorrecto utilizar el modificador abstract para una propiedad


esttica.

Una propiedad abstracta heredada se puede reemplazar en una clase


derivada si se incluye una declaracin de propiedad que utilice el
modificador override.

Para obtener ms informacin sobre las clases abstractas, vea Clases y


miembros de clase abstractos y sellados (Gua de programacin de C#).
Una clase abstracta debe proporcionar implementaciones para todos los
miembros de la interfaz.

Una clase abstracta que implementa una interfaz podra asignar los mtodos
de la interfaz a mtodos abstractos.
namespace @abstract
{
class Program
{
abstract class BaseClass // Abstract class
{
protected int x;
protected int y;
public abstract void AbstractMethod(); // Abstract method
public abstract int X { get; }
public abstract int Y { get; }
}
class DerivedClass : BaseClass
{
public override void AbstractMethod()
{
x++;
y++;
}
public override int X // overriding property
{
get
{
return x + 10;
}
}
public override int Y // overriding property
{
get
{
return y + 10;
}
}
static void Main()
{
Console.WriteLine("\nIngrese los datos: ");
DerivedClass o = new DerivedClass();
o.x = int.Parse(Console.ReadLine());
o.y = int.Parse(Console.ReadLine());
o.AbstractMethod();
Console.WriteLine("x = {0}, y = {1}", o.X, o.Y);
Console.ReadKey();
}
}
}

En este ejemplo, la clase DerivedClass se deriva de una clase


abstracta BaseClass.
La
clase
abstracta
contiene
un
mtodo
abstracto, AbstractMethod, y dos propiedades abstractas, X y Y.

Potrebbero piacerti anche