Está en la página 1de 20

CLASES Y OBJETOS A. Introduccin Durante los captulos anteriores se han dado unas nociones bsicas de la sintaxis de Java.

A partir de ahora es cuando entramos la verdadera potencia de Java como lenguaje orientado a objetos: las clases y los objetos. Aquellas personas que nunca hayan programado en un lenguaje orientado a objeto, o que no conozcan las nociones bsicas de paradigma conviene que lean el captulo "I.1 Introduccin a la programacin orientada a objetos" de este tutorial, ya que a partir de ahora los conceptos que en l se exponen se darn por entendidos. Durante todo este captulo se va a trabajar en la construccin de una clase MiPunto, que modeliza un punto en un espacio plano: class MiPunto{

int x, y;

int metodoSuma( int paramX, int paramY ) {

return ( paramX + paramY );

double distancia(int x, int y) {

int dx= this.x pX;

int dy = this.y pY;

return Math.sqrt(dx*dx + dy*dy);

void metodoVacio( ) { }

void inicia( int paramX, int paramY ) {

x = paramX;

y = paramY;

void inicia2( int x, int y ) {

x = x; // Ojo, no modificamos la variable de instancia!!!

this.y = y; // Modificamos la variable de instancia!!!

MiPunto( int paramX, int paramY ) {

this.x = paramX; // Este this se puede omitir

y = paramY; // No hace falta this

MiPunto() {

inicia(-1,-1); //Por defecto ; this(-1,-1) hace lo mismo

B. Definicin de una clase


a.) Introduccin

El elemento bsico de la programacin orientada a objetos en Java es la clase. Una clase define la forma y comportamiento de un objeto. Para crear una clase slo se necesita un archivo fuente que contenga la palabra clave reservada class seguida de un identificador legal y un bloque delimitado por dos llaves para el cuerpo de la clase. class MiPunto { } Un archivo de Java debe tener el mismo nombre que la clase que contiene, y se les suele asignar la extensin ".java". Por ejemplo la clase MiPunto se guardara en un fichero que se llamaseMiPunto.java. Hay que tener presente que en Java se diferencia entre maysculas y minsculas; el nombre de la clase y el de archivo fuente han de ser exactamente iguales. Aunque la clase MiPunto es sintcticamente correcta, es lo que se viene a llamar una clase vaca, es decir, una clase que no hace nada. Las clases tpicas de Java incluirn variables y mtodos de instancia. Los programas en Java completos constarn por lo general de varias clases de Java en distintos archivos fuente.

Una clase es una plantilla para un objeto. Por lo tanto define la estructura de un objeto y su interfaz funcional, en forma de mtodos. Cuando se ejecuta un programa en Java, el sistema utiliza definiciones de clase para crear instancias de las clases, que son los objetos reales. Los trminos instancia y objeto se utilizan de manera indistinta. La forma general de una definicin de clase es: class Nombre_De_Clase {

tipo_de_variable nombre_de_atributo1;

tipo_de_variable nombre_de_atributo2;

// . . .

tipo_devuelto nombre_de_mtodo1( lista_de_parmetros ) {

cuerpo_del_mtodo1;

tipo_devuelto nombre_de_mtodo2( lista_de_parmetros ) {

cuerpo_del_mtodo2;

// . . .

Los tipos tipo_de_variable y tipo_devuelto, han de ser tipos simples Java o nombres de otras clases ya definidas. Tanto Nombre_De_Clase, como los nombre_de_atributo y nombre_de_mtodo, han de ser identificadores Java vlidos.
b.) Los atributos

Los datos se encapsulan dentro de una clase declarando variables dentro de las llaves de apertura y cierre de la declaracin de la clase, variables que se conocen como atributos. Se declaran igual que las variables locales de un mtodo en concreto. Por ejemplo, este es un programa que declara una clase MiPunto, con dos atributos enteros llamados x e y. class MiPunto {

int x, y;

Los atributos se pueden declarar con dos clases de tipos: un tipo simple Java (ya descritos), o el nombre de una clase (ser una referencia a objeto, vase el punto C.a de este mismo apartado). Cuando se realiza una instancia de una clase (creacin de un objeto) se reservar en la memoria un espacio para un conjunto de datos como el que definen los atributos de una clase. A este conjunto de variables se le denomina variables de instancia.
c.) Los mtodos

Los mtodos son subrutinas que definen la interfaz de una clase, sus capacidades y comportamiento. Un mtodo ha de tener por nombre cualquier identificador legal distinto de los ya utilizados por los nombres de la clase en que est definido. Los mtodos se declaran al mismo nivel que las variables de instancia dentro de una definicin de clase. En la declaracin de los mtodos se define el tipo de valor que devuelven y a una lista formal de parmetros de entrada, de sintaxis tipo identificador separadas por comas. La forma general de una declaracin de mtodo es:

tipo_devuelto nombre_de_mtodo( lista-formal-de-parmetros ) {

cuerpo_del_mtodo;

Por ejemplo el siguiente mtodo devuelve la suma de dos enteros: int metodoSuma( int paramX, int paramY ) {

return ( paramX + paramY );

En el caso de que no se desee devolver ningn valor se deber indicar como tipo la palabra reservada void. As mismo, si no se desean parmetros, la declaracin del mtodo debera incluir un par de parntesis vacos (sin void): void metodoVacio( ) { }; Los mtodos son llamados indicando una instancia individual de la clase, que tendr su propio conjunto nico de variables de instancia, por lo que los mtodos se pueden referir directamente a ellas. El mtodo inicia() para establecer valores a las dos variables de instancia sera el siguiente: void inicia( int paramX, int paramY ) {

x = paramX;

y = paramY;

C. La instanciacin de las clases: Los objetos


a.) Referencias a Objeto e Instancias

Los tipos simples de Java describan el tamao y los valores de las variables. Cada vez que se crea una clase se aade otro tipo de dato que se puede utilizar igual que uno de los tipos simples. Por ello al declarar una nueva variable, se puede utilizar un nombre de clase como tipo. A estas variables se las conoce como referencias a objeto. Todas las referencias a objeto son compatibles tambin con las instancias de subclases de su tipo. Del mismo modo que es correcto asignar un byte a una variable declarada como int, se puede declarar que una variable es del tipo MiClase y guardar una referencia a una instancia de este tipo de clase: MiPunto p; Esta es una declaracin de una variable p que es una referencia a un objeto de la clase MiPunto, de momento con un valor por defecto de null. La referencia null es una referencia a un objeto de la clase Object, y se podr convertir a una referencia a cualquier otro objeto porque todos los objetos son hijos de la clase Object.
b.) Constructores

Las clases pueden implementar un mtodo especial llamado constructor. Un constructor es un mtodo que inicia un objeto inmediatamente despus de su creacin. De esta forma nos evitamos el tener que iniciar las variables explcitamente para su iniciacin. El constructor tiene exactamente el mismo nombre de la clase que lo implementa; no puede haber ningn otro mtodo que comparta su nombre con el de su clase. Una vez definido, se llamar automticamente al constructor al crear un objeto de esa clase (al utilizar el operador new). El constructor no devuelve ningn tipo, ni siquiera void. Su misin es iniciar todo estado interno de un objeto (sus atributos), haciendo que el objeto sea utilizable inmediatamente; reservando memoria para sus atributos, iniciando sus valores... Por ejemplo: MiPunto( ) {

inicia( -1, -1 );

Este constructor denominado constructor por defecto, por no tener parmetros, establece el valor -1 a las variables de instancia x e y de los objetos que construya. El compilador, por defecto ,llamar al constructor de la superclase Object() si no se especifican parmetros en el constructor. Este otro constructor, sin embargo, recibe dos parmetros: MiPunto( int paraX, int paraY ) {

inicia( paramX, paramY );

La lista de parmetros especificada despus del nombre de una clase en una sentencia new se utiliza para pasar parmetros al constructor. Se llama al mtodo constructor justo despus de crear la instancia y antes de que new devuelva el control al punto de la llamada. As, cuando ejecutamos el siguiente programa: MiPunto p1 = new MiPunto(10, 20); System.out.println( "p1.- x = " + p1.x + " y = " + p1.y ); Se muestra en la pantalla: p1.- x = 10 y = 20 Para crear un programa Java que contenga ese cdigo, se debe de crear una clase que contenga un mtodo main(). El intrprete java se ejecutar el mtodo main de la clase que se le indique como parmetro. Para ms informacin sobre cmo crear y ejecutar un programa, as como los tipos de programas que se pueden crear en Java, vase el captulo "II.12. Creacin de programas Java" de este tutorial.

c.) El operador new

El operador new crea una instancia de una clase (objetos) y devuelve una referencia a ese objeto. Por ejemplo: MiPunto p2 = new MiPunto(2,3); Este es un ejemplo de la creacin de una instancia de MiPunto, que es controlador por la referencia a objeto p2. Hay una distincin crtica entre la forma de manipular los tipos simples y las clases en Java: Las referencias a objetos realmente no contienen a los objetos a los que referencian. De esta forma se pueden crear mltiples referencias al mismo objeto, como por ejemplo: MiPunto p3 =p2; Aunque tan slo se cre un objeto MiPunto, hay dos variables (p2 y p3) que lo referencian. Cualquier cambio realizado en el objeto referenciado por p2 afectar al objeto referenciado por p3. La asignacin de p2 a p3 no reserva memoria ni modifica el objeto. De hecho, las asignaciones posteriores de p2 simplemente desengancharn p2 del objeto, sin afectarlo: p2 = null; // p3 todava apunta al objeto creado con new Aunque se haya asignado null a p2, p3 todava apunta al objeto creado por el operador new. Cuando ya no haya ninguna variable que haga referencia a un objeto, Java reclama automticamente la memoria utilizada por ese objeto, a lo que se denomina recogida de basura. Cuando se realiza una instancia de una clase (mediante new) se reserva en la memoria un espacio para un conjunto de datos como el que definen los atributos de la clase que se indica en la instanciacin. A este conjunto de variables se le denomina variables de instancia. La potencia de las variables de instancia es que se obtiene un conjunto distinto de ellas cada vez que se crea un objeto nuevo. Es importante el comprender que cada objeto tiene su propia copia de las variables de instancia de su clase, por lo que los cambios sobre las variables de instancia de un objeto no tienen efecto sobre las variables de instancia de otro. El siguiente programa crea dos objetos MiPunto y establece los valores de x e y de cada uno de ellos de manera independiente para mostrar que estn realmente separados. MiPunto p4 = new MiPunto( 10, 20 );

MiPunto p5 = new MiPunto( 42, 99 ); System.out.println("p4.- x = " + p4.x + " y = " + p4.y); System.out.println("p5.- x = " + p5.x + " y = " + p5.y); Este es el aspecto de salida cuando lo ejecutamos. p4.- x = 10 y = 20 p5.- x = 42 y = 99 D. Acceso al objeto
a.) El operador punto (.)

El operador punto (.) se utiliza para acceder a las variables de instancia y los mtodos contenidos en un objeto, mediante su referencia a objeto: referencia_a_objeto.nombre_de_variable_de_instancia referencia_a_objeto.nombre_de_mtodo( lista-de-parmetros ); Hemos creado un ejemplo completo que combina los operadores new y punto para crear un objeto MiPunto, almacenar algunos valores en l e imprimir sus valores finales: MiPunto p6 = new MiPunto( 10, 20 ); System.out.println ("p6.- 1. X=" + p6.x + " , Y=" + p6.y); p6.inicia( 30, 40 ); System.out.println ("p6.- 2. X=" + p6.x + " , Y=" + p6.y); Cuando se ejecuta este programa, se observa la siguiente salida: p6.- 1. X=10 , Y=20 p6.- 2. X=30 , Y=40 Durante las impresiones (mtodo println()) se accede al valor de las variables mediante p6.x y p6.y, y entre una impresin y otra se llama al mtodo inicia(), cambiando los valores de las variables de instancia. Este es uno de los aspectos ms importantes de la diferencia entre la programacin orientada a objetos y la programacin estructurada. Cuando se llama al mtodo p6.inicia(), lo primero que se hace en el mtodo es sustituir los nombres de los atributos de la clase por las correspondientes variables de instancia del objeto con que se ha llamado. As por ejemplo x se convertir en p6.x.

Si otros objetos llaman a inicia(), incluso si lo hacen de una manera concurrente, no se producen efectos laterales, ya que las variables de instancia sobre las que trabajan son distintas.
b.) La referencia this

Java incluye un valor de referencia especial llamado this, que se utiliza dentro de cualquier mtodo para referirse al objeto actual. El valor this se refiere al objeto sobre el que ha sido llamado el mtodo actual. Se puede utilizar this siempre que se requiera una referencia a un objeto del tipo de una clase actual. Si hay dos objetos que utilicen el mismo cdigo, seleccionados a travs de otras instancias, cada uno tiene su propio valor nico de this. Un refinamiento habitual es que un constructor llame a otro para construir la instancia correctamente. El siguiente constructor llama al constructor parametrizado MiPunto(x,y) para terminar de iniciar la instancia: MiPunto() {

this( -1, -1 ); // Llama al constructor parametrizado

En Java se permite declarar variables locales, incluyendo parmetros formales de mtodos, que se solapen con los nombres de las variables de instancia. No se utilizan x e y como nombres de parmetro para el mtodo inicia, porque ocultaran las variables de instancia x e y reales del mbito del mtodo. Si lo hubisemos hecho, entonces x se hubiera referido al parmetro formal, ocultando la variable de instancia x: void inicia2( int x, int y ) {

x = x; // Ojo, no modificamos la variable de instancia!!!

this.y = y; // Modificamos la variable de instancia!!!

E. La destruccin del objeto


a.) La destruccin de los objetos

Cuando un objeto no va a ser utilizado, el espacio de memoria de dinmica que utiliza ha de ser liberado, as como los recursos que posea, permitiendo al programa disponer de todos los recursos posibles. A esta accin se la da el nombre de destruccin del objeto. En Java la destruccin se puede realizar de forma automtica o de forma personalizada, en funcin de las caractersticas del objeto.
b.) La destruccin por defecto: Recogida de basura

El intrprete de Java posee un sistema de recogida de basura, que por lo general permite que no nos preocupemos de liberar la memoria asignada explcitamente. El recolector de basura ser el encargado de liberar una zona de memoria dinmica que haba sido reservada mediante el operador new, cuando el objeto ya no va a ser utilizado ms durante el programa (por ejemplo, sale del mbito de utilizacin, o no es referenciado nuevamente). El sistema de recogida de basura se ejecuta peridicamente, buscando objetos que ya no estn referenciados.
c.) La destruccin personalizada: finalize

A veces una clase mantiene un recurso que no es de Java como un descriptor de archivo o un tipo de letra del sistema de ventanas. En este caso sera acertado el utilizar la finalizacin explcita, para asegurar que dicho recurso se libera. Esto se hace mediante la destruccin personalizada, un sistema similar a los destructores de C++. Para especificar una destruccin personalizada se aade un mtodo a la clase con el nombre finalize: class ClaseFinalizada{

ClaseFinalizada() { // Constructor

// Reserva del recurso no Java o recurso compartido

protected void finalize() {

// Liberacin del recurso no Java o recurso compartido

El intrprete de Java llama al mtodo finalize(), si existe cuando vaya a reclamar el espacio de ese objeto, mediante la recogida de basura. Debe observarse que el mtodo finalize() es de tipo protected void y por lo tanto deber de sobreescribirse con este mismo tipo.

Instanciacin de clases

5.4.1. Recoleccin de basura

La instanciacin de clases en Python es trivial. Para instanciar una clase, simplemente invoque a la clase como si fuera una funcin, pasando los argumentos que defina el mtodo __init__. El valor de retorno ser el objeto recin creado. Ejemplo 5.7. Creacin de una instancia de FileInfo
>>> import fileinfo >>> f = fileinfo.FileInfo("/music/_singles/kairo.mp3") >>> f.__class__ <class fileinfo.FileInfo at 010EC204> >>> f.__doc__ 'store file metadata' >>> f {'name': '/music/_singles/kairo.mp3'}

Est creando una instancia de la clase FileInfo (definida en el mdulo fileinfo) y asignando la instancia recin creada a la variable f. Est pasando un parmetro, /music/_singles/kairo.mp3, que ser el argumento filename en el mtodo __init__ de FileInfo Cada instancia de una clase contiene un atributo incorporado, __class__, que es el objeto de su clase (observe que la representacin de esto incluye la direccin fsica de la instancia en mi mquina; la de usted diferir). Los programadores de Java estarn familiarizados con la clase Class, que contiene mtodos comogetName y getSuperclass para obtener informacin de metadatos de un objeto. En Python este tipo de metadatos se obtienen directamente del propio objeto mediante atributos como __class__, __name__, y__bases__. Puede acceder a la cadena de documentacin de la instancia igual que con una funcin o mdulo. Todas las instancias de una clase comparten la misma cadena de documentacin.

Recuerda cuando el mtodo __init__ asign su argumento filename a self["name"]? Bien, aqu est el resultado. Los argumentos que pasa cuando crea la instancia de la clase se envan junto al mtodo __init__ (junto con la referencia al objeto, self, que Python aade por su cuenta).

En Python, simplemente invocamos a una clase como si fuese una funcin para crear una nueva instancia de la clase. No hay operador new explcito como enC++ o Java. 5.4.1. Recoleccin de basura Si crear instancias nuevas es sencillo, destruirlas lo es ms. En general, no hay necesidad de liberar de forma explcita las instancias, porque se eliminan automticamente cuando las variables a las que se asignan salen de mbito. Son raras las prdidas de memoria en Python. Ejemplo 5.8. Intento de implementar una prdida de memoria
>>> def leakmem(): ... ... >>> for i in range(100): ... leakmem() f = fileinfo.FileInfo('/music/_singles/kairo.mp3')

Cada vez que se invoca la funcin leakmem, se crea una instancia de FileInfo, asignndola a la variable f, que es local a la funcin. Entonces la funcin termina sin liberar f, de manera que esperaramos tener aqu una fuga de memoria (memory leak), pero estaramos equivocados. Cuando termina la funcin, se dice que la variable f sale de mbito. En este momento, ya no hay referencias a la instancia recin creada de FileInfo (ya que no la hemos asignado a ninguna otra cosa aparte de f), as que Python la destruye por nosotros. No importa cuntas veces llamemos a la funcin leakmem, que nunca perder memoria, porque cada vez, Python destruir la instancia de FileInfo recin creada antes de salir de leakmem.

El trmino tcnico para esta forma de recoleccin de basura es recuento de referencias (reference counting). Python mantiene una lista de referencias a cada instancia creada. En el ejemplo anterior, slo hay una referencia a la instancia de FileInfo: la variable local f. Cuando termina la funcin, la variable f se encuentra fuera de mbito, as que la cuenta de referencias cae a 0, y Python destruye la instancia de forma automtica. En versiones anteriores de Python existan situaciones donde la cuenta de referencias fallaba, y Python no poda hacer limpieza tras de usted. Si creaba dos instancias que se referenciaban una a otra (por ejemplo, una lista doblemente enlazada, donde cada nodo tiene un puntero hacia el anterior y el siguiente en la lista), ninguna instancia se hubiera destruido automticamente, porque Python (correctamente) creera que siempre hay una referencia a cada instancia. Python 2.0 tiene una forma adicional de recoleccin de basuras llamada mark-and-sweep que es lo suficientemente inteligente como para darse cuenta de este cerrojo virtual y elimina correctamente referencias circulares. Habiendo estudiado filosofa, me resulta chocante pensar que las cosas desaparecen cuando uno no las est mirando, pero eso es exactamente lo que sucede en Python. En general, puede simplemente olvidarse de la gestin de memoria, y dejarle a Python que haga la limpieza.

Qu es una Clase?
Cuando decimos ave, sabemos que nos referimos a algo con plumas, pico, dos patas, etc. No importa realmente si hemos visto un ave o no, o si tenemos un ave frente a nosotros; entendemos claramente que la palabra ave se refiere a alguna cosa que cumple con unas caractersticas especficas, se comporta de una forma concreta, etc, etc. No es ms que una palabra, pero nos permite clasificar las cosas. Por ejemplo, sabemos que una gallina es un ave y que un perro no es un ave. La clasificacin es algo que hacemos todos los das, a cada momento (entre otras cosas, nos libra de utilizar medias como guantes o baarnos en el comedor en vez de en la ducha). Cada vez que decimos que algo esalguna cosa, estamos clasificndolo, asocindolo a una clase. Sin embargo, sabemos que la palabra ave no se refiere a un animal concreto, sino a una serie de animales. Avees la palabra que usamos para identificarlos en un grupo, pero no podemos decir hoy har volar la palabra ave(bueno, puedes decirlo, pero estars cada vez ms cerca del manicomio), en tal caso siempre nos referiremos aesta o aquella ave, siempre hablaremos de un animal concreto. La palabra es lo que conocemos como unconcepto, una abstraccin. En la POO ocurre igual, una clase no es ms que una serie de cdigo que define a todos los elementos relacionados con ella. As, podramos escribir la clase ave colocando en ella todas las caractersticas que tienen las aves (pico, color, alto, ancho, patas,) esas caractersticas las llamaremos en lenguaje de programadores,propiedades. Pero la cosa no termina all, resulta que las aves tienen tambin ciertos mecanismos especficos, como comer, dormir, reproducirse (aljate Pertvertvaz! defensa A esto lo llamaremos eventos. Entonces, vemos que una clase es algo as como el concepto de lo que queremos hacer, es como la idea (concebida al detalle) de la cosa, del objeto; pero igual que con las ideas, no puedo hacer nada directamente con una clase (puedes sentarte en una silla, pero no en tu idea de una silla). Sin embargo, esta idea ser la que d forma al objeto que crearemos (que tendr las caractersticas, mecanismos y comportamientos que habamos pensado en nuestra idea). ), etc. Estos mecanismos los llamamos mtodos. Por ltimo, tambin sabemos que las aves reaccionan ante ciertos sucesos, como peligro, atraccin,

Qu es una Instancia?
Bien, decamos que una clase es como la definicin de un objeto, pero no es el objeto en s, del modo como una idea no es una cosa fsica (el ejemplo de la silla). As que para sentarnos necesitaremos convertir esa idea en algo, en un objeto real; a ese objeto lo llamamos instancia. En un mismo proyecto puedo tener una o ms instancias de una misma clase sin problemas. Cada vez que creamos una nueva instancia, sta adquiere las propiedades, mtodos y eventos de la clase a la que pertenece (es lo que permite la relacin es un), sin embargo, cada instancia es independiente de las otras; esto nos da dos ventajas: 1. Si hago algn cambio en la clase, todas las instancias de esta clase se actualizarn automticamente; esto nos permite hacer cambios sin tener que ir a cada una de las instancias (se aplica el mismo principio de herencia, aunque a un nivel diferente). 2. Al ser independientes de las otras instancias, puedo darles valores diferentes sin que afecten a las dems (como tener una silla negra, una roja, una ms alta, etc.). Aunque comparten la misma estructura, pueden programarse individualmente, dando versatilidad y flexibilidad al cdigo. Ahora que tenemos la base terica, debemos dar un paso ms prctico, en el siguiente post aprenderemos Cmo Escribir una Clase

Referencia al objeto actual con this

Dentro del cdigo de cualquier mtodo de un objeto siempre es posible hacer referencia al propio objeto usando la palabra reservada this. Esto puede venir bien a la hora de escribir constructores de objetos debido a que permite que los nombres que demos a los parmetros del constructor puedan coincidir nombres de los campos del objeto sin que haya ningn problema. Por ejemplo, el constructor de la clase Persona escrito anteriormente se puede reescribir as usando this:

Persona (string Nombre, int Edad, string NIF)

this.Nombre = Nombre;

this.Edad = Edad;

this.NIF = NIF;

Es decir, dentro de un mtodo con parmetros cuyos nombres coincidan con campos, se da preferencia a los parmetros y para hacer referencia a los campos hay que prefijarlos con elthis tal y como se muestra en el ejemplo.

El ejemplo anterior puede que no resulte muy interesante debido a que para evitar tener que usar this podra haberse escrito el constructor tal y como se mostr en la primera versin del mismo: dando nombres que empiecen en minscula a los parmetros y nombres que empiecen con maysculas a los campos. De hecho, ese es el convenio que Microsoft recomienda usar. Sin embargo, como ms adelante se ver s que puede ser til this cuando los campos a inicializar a sean privados, ya que el convenio de escritura de identificadores para campos privados recomendado por Microsoft coincide con el usado para dar identificadores a parmetros (obviamente otra solucin sera dar cualquier otro nombre a los parmetros del constructor o los campos afectados, aunque as el cdigo perdera algo legibilidad)

Un uso ms frecuente de this en C# es el de permitir realizar llamadas a un mtodo de un objeto desde cdigo ubicado en mtodos del mismo objeto. Es decir, en C# siempre es necesario que cuando llamemos a algn mtodo de un objeto precedamos al operador . de alguna expresin que indique cul es el objeto a cuyo mtodo se desea llamar, y si ste mtodo pertenece al mismo objeto que hace la llamada la nica forma de conseguir indicarlo en C# es usando this.

Finalmente, una tercera utilidad de this es permitir escribir mtodos que puedan devolver como objeto el propio objeto sobre el que el mtodo es aplicado. Para ello bastara usar una instruccin return this; al indicar el objeto a devolver.