P. 1
Clases y Estructuras en c#

Clases y Estructuras en c#

|Views: 33|Likes:
Publicado porDarkD1

More info:

Published by: DarkD1 on Nov 02, 2011
Copyright:Attribution Non-commercial

Availability:

Read on Scribd mobile: iPhone, iPad and Android.
download as DOCX, PDF, TXT or read online from Scribd
See more
See less

04/30/2012

pdf

text

original

Clases y estructuras (Guía de programación de C#

)
Visual Studio 2010 Otras versiones

Las clases y structs son dos de las construcciones básicas del Common Type System (CTS) en .NET Framework. Ambas son esencialmente un struct de datos que encapsula un conjunto de datos y comportamientos relacionados como una unidad lógica. Los datos y comportamientos son los miembros de la clase o struct e incluyen sus métodos, propiedades, eventos, etc., tal como se enumeran más adelante en este tema. Una declaración de clase o struct es como un plano que se utiliza para crear instancias u objetos en tiempo de ejecución. Si define una clase o un struct llamado Person, Persones el nombre del tipo. Si declara e inicializa una variable p de tipo Person, se dice que p es un objeto o una instancia de Person. Se pueden crear varias instancias del mismo tipoPerson y cada instancia puede tener diferentes valores en sus propiedades y campos. Una clase es un tipo de referencia. Cuando se crea un objeto de la clase, la variable a la que se asigna el objeto solo incluye una referencia a dicha memoria. Cuando la referencia a objeto se asigna a una nueva variable, la nueva variable hace referencia al objeto original. Los cambios realizados en una variable se reflejan en la otra variable porque ambas hacen referencia a los mismos datos. Un struct es un tipo de valor. Cuando se crea un struct, la variable a la que se asigna incluye los datos reales del struct. Cuando el struct se asigna a una nueva variable, se copia.La nueva variable y la variable original contienen por tanto dos copias independientes de los mismos datos. Los cambios realizados en una copia no afectan a la otra copia. En general, las clases se utilizan para modelar comportamiento más complejo o datos que se piensan modificar una vez creado un objeto de clase. Los structs son más adecuadas para pequeñas estructuras de datos que contienen principalmente datos que no se piensan modificar una vez creado el struct. Para obtener más información, vea Clases (Guía de programación de C#), Objetos (Guía de programación de C#) y Estructuras (Guía de programación de C#).

Ejemplo
En el ejemplo siguiente, se define MyCustomClass con tres miembros en el nivel superior del espacio de nombres ProgrammingGuide. Se crea una instancia (objeto) deMyCustomClass en el

int result = myClass. public class MyCustomClass { // Class members: // Property.método Main de la clase Program. // Set the value of a public property. Para obtener acceso a los métodos y propiedades del objeto se utiliza la notación de punto. myClass. } } } Encapsulación En ocasiones se hace referencia a la encapsulación como el primer pilar o principio de la programación orientada a objetos. } // Instance Constructor. MyCustomClass myClass = new MyCustomClass(). public MyCustomClass() { Number = 0. class Program { static void Main(string[] args) { // Create an object of type MyCustomClass. una clase o un struct puede especificar el nivel posible de acceso a cada uno de sus miembros en el código fuera de la clase o el . This one contains // the Main method. // Call a public method. public int Multiply(int num) { return num * Number. the entry point for the program. } } // Another class definition. C# namespace ProgrammingGuide { // Class definition. } // Method.Multiply(4).Number = 27. public int Number { get. Según el principio de encapsulación. set.

propiedades y eventos se deben declarar dentro de un tipo. se debe declarar dentro de una clase o struct. Para obtener más información sobre las clases. protegidos e internos de la clase base. Para obtener más información. Incluso el punto de entrada de un programa. Una clase que deriva de otra clase (la clase base) contiene automáticamente todos los miembros públicos. En C#. La accesibilidad del código de cliente a los tipos y sus miembros se especifica mediante los modificadores de acceso public. el método Main. Para obtener más información sobre diseñar clases. Miembros Todos los métodos. Aunque no se pueden crear instancias de las clases abstractas directamente. vea Clases (Guía de programación de C#) y Objetos (Guía de programación de C#).struct. La accesibilidad predeterminada es private. vea Instrucciones de diseño de tipos. Los métodos y variables que no se van a utilizar fuera de la clase o el ensamblado se pueden ocultar para limitar la posibilidad de errores de codificación o ataques malintencionadas. éstas pueden actuar como clases base de otras clases que proporcionan la implementación que falta. vea Herencia (Guía de programación de C#) y Polimorfismo (Guía de programación de C#). Las clases pueden declararse como abstract.En la lista siguiente se incluyen los diversos tipos de miembros que pueden declararse en una clase o en un struct. no existen variables ni métodos globales como en otros lenguajes. constantes. Las clases también pueden declararse como sealed para impedir que . Puede que otros métodos y propiedades solo se utilicen en la propia clase o struct. conocido como código de cliente. Para obtener más información. vea Modificadores de acceso (Guía de programación de C#).           Campos Constantes Propiedades Métodos Constructores Destructores Eventos Indizadores Operadores Tipos anidados Accesibilidad A algunos métodos y propiedades se les llama o se accede a ellos desde código fuera de su clase o struct. protected internal y private. estos elementos se denominan miembros de la clase o struct. internal. protected. excepto sus constructores y destructores. campos. lo que significa que uno o varios de sus métodos no tienen ninguna implementación. Es importante limitar la accesibilidad del código para que solo el código de cliente previsto pueda llegar a él. Herencia Las clases (pero no los structs) admiten el concepto de herencia.

Para obtener más información. por ejemplo al rellenar una lista con estructuras de datos que no tiene que conservar o pasar a otro método. Para obtener más información. Tanto las clases como los structs pueden contener miembros estáticos. vea Genéricos (Guía de programación de C#). Para obtener más información. Tipos genéricos Las clases y los structs pueden definirse con uno o más parámetros de tipo. Por ejemplo. vea Interfaces (Guía de programación de C#). struct o método en un archivo de código y otra parte en un archivo de código independiente.Collections. Tipos estáticos Las clases (pero no los structs) se pueden declarar como estáticas. El código cliente proporciona el tipo cuando crea una instancia del tipo. vea Inicializadores de objeto y de colección (Guía de programación de C#). Tipos anidados Una clase o un struct se pueden anidar en otra clase o struct. Para obtener más información. vea Tipos anidados. vea Clases estáticas y sus miembros (Guía de programación de C#). vea Clases y métodos parciales. Para obtener más información. Tipos parciales Puede definir parte de una clase. Inicializadores de objeto Puede crear instancias y colecciones de objetos de clase o struct. Heredar de una interfaz significa que el tipo implementa todos los métodos definidos en la interfaz. e inicializarlos. Para obtener más información.Generic se define con un parámetro de tipo. Para obtener más información. sin llamar a su constructor explícitamente. la claseList(Of T) del espacio de nombres System. Interfaces Las clases y los structs pueden heredar varias interfaces. utilice . El código cliente crea una instancia de List<string> o List<int> para especificar el tipo que contendrá la lista. Una clase estática solo puede contener miembros estáticos y no se pueden crear instancias de ésta con la palabra clave new. Tipos anónimos En situaciones en las que no es conveniente o necesario crear una clase con nombre.otras clases hereden de ellas. Al cargarse el programa se carga una copia de la clase en la memoria y se obtiene acceso a sus miembros a través del nombre de la clase. vea Clases y miembros de clase abstractos y sellados (Guía de programación de C#).

Nota Los tipos estáticos se comportan de manera diferente a la que se describe aquí. Instancias de struct frente aInstancias de clase . El código cliente es el código que utiliza estas variables para llamar a los métodos y obtener acceso a las propiedades públicas del objeto. /////////////////////////////////// Objetos (Guía de programación de C#) Visual Studio 2010 Otras versiones Una definición de clase o struct es como un plano que especifica qué puede hacer el tipo. Para obtener más información. Variables locales tipificadas implícitamente En un método de clase o struct. vea la Especificación del lenguaje C#.Para obtener más información.En un lenguaje orientado a objetos como C#. programación de C#). vea Variables locales con asignación implícita de tipos (Guía de programación de C#). vea Métodos de extensión (Guía de programación de C#). puede utilizar tipos implícitos para indicar al compilador que determine el tipo correcto en tiempo de compilación. Un objeto es básicamente un bloque de memoria que se ha asignado y configurado en función del plano. Métodos de extensión. Los objetos también se denominan instancias y se pueden almacenar en una variable con nombre o en una matriz o colección. un programa típico se compone de varios objetos que interactúan dinámicamente. Puede "extender" una clase sin crear una clase derivada. Para ello. cree un tipo independiente en el que se pueda llamar a sus métodos como si pertenecieran al tipo original. La especificación del lenguaje es la fuente definitiva de la sintaxis y el uso de C#.los tipos anónimos. vea Tipos anónimos (Guía de programación de C#). Para obtener más información. Un programa puede crear muchos objetos de la misma clase. Especificación del lenguaje C# Para obtener más información. Para obtener más información.

methods. Console. and person1 also changes. Console. person2. Person person2 = person1. set. person1. Age). person2.Age = 16. person2.WriteLine("person1 Name = {0} Age = {1}". } } /* Output: person1 Name = Leopold Age = 6 2 son instancias. u objetos.. // Declare new person. int age) { Name = name. } //Other properties.Name. Person es el tipo y person1 y person C# public class Person { public string Name { get.WriteLine("person1 Name = {0} Age = {1}". Age = age.Name.WriteLine("Press any key to exit.Dado que las clases son tipos de referencia. person1. person1.").WriteLine("person2 Name = {0} Age = {1}". set. de ese tipo. person1. Console. assign person1 to it. Console. Este punto se analiza con más detalle más adelante. Console. una variable de un objeto de clase contiene una referencia a la dirección del objeto en el montón administrado. } class Program { static void Main() { Person person1 = new Person("Leopold". En el ejemplo siguiente. events.Name = "Molly". ambas variables hacen referencia al objeto en esa dirección.Name. // Keep the console open in debug mode.. Age). } public int Age { get. Si un segundo objeto del mismo tipo se asigna al primer objeto. en este mismo tema. //Change the name of person2. Las instancias de clases se crean utilizando el operador new. person2.ReadKey(). } public Person(string name. . 6). Age).

Console."). } } /* Output: p1 Name = Alex Age = 9 p2 Name = Spencer Age = 7 p1 Name = Alex Age = 9 . Age = age. // Keep the console open in debug mode.WriteLine("p1 Name = {0} Age = {1}". p1. Console. // Memory is allocated on thread stack. public int Age. una variable de un objeto de struct contiene una copia de todo el objeto.Age). como se muestra en el ejemplo siguiente: C# public struct Person { public string Name. public Person(string name. Console. p1. p1. // Create new struct object.person2 Name = Molly Age = 16 person1 Name = Molly Age = 16 */ Dado que los structs son tipos de valor. Note that // without using "new". Person p2 = p1. Console. p2. pero no es obligatorio.WriteLine("p2 Name = {0} Age = {1}".Name.Name.WriteLine("p1 Name = {0} Age = {1}". También se pueden crear instancias de structs utilizando el operador new. struct can be initialized // Assign values to p2 members.Age).Name. p2. p2. // p1 values remain unchanged because p2 is copy.WriteLine("Press any key to exit. int age) { Name = name. p1.Age). Person p1 = new Person("Alex". } } public class Application { static void Main() { // Create struct instance and initialize by using "new". Console.Age = 7.ReadKey(). 9). p2.Name = "Spencer".

*/ La memoria para p1 y p2 se asigna en la pila de subprocesos. if (p2.Equals. matrices). debe considerar si los objetos son instancias de tipos de valor (structs) o tipos de referencia (clases.Name = "Wallace". se llama al método directamente en el objeto como se muestra en el ejemplo siguiente:  C# Person p1 = new Person("Wallace". Ésta es una razón por la que los structs se copian en la asignación. Nota La asignación y desasignación de memoria en el montón administrado están muy optimizadas en Common La no existe una diferencia significativa de costo de rendimiento entre asignar una instancia de clase en el montón pila. Esta memoria se reclama junto con el tipo o método en el que se declara. utilice el método ValueType.Object es la clase base implícita para todos los tipos de valor y de referencia. incluyendo las clases y structs definidos por el usuario. delegados.) Para determinar si los campos de instancia de dos instancias de struct tienen los mismos valores. 75).ValueType.Equals(p1)) Console. Dado que todas los structs heredan implícitamente de System. primero debe diferenciar si desea conocer si las dos variables representan al mismo objeto en memoria o si los valores de uno o más de sus campos son equivalentes. Por el contrario. p2. Para obtener más información sobre la recolección de elementos no utilizados en . vea recolección de elementos no utilizados.  Para determinar si dos instancias de clase hacen referencia a la misma ubicación en memoria (lo que significa que tienen la misma identidad). Si desea comparar valores. . p2.Age = 75. Common Language Runtime reclama automáticamente (mediante la recolección de elementos no utilizados) la memoria asignada a una instancia de clase cuando todas las referencias al objeto han quedado fuera del ámbito."). No es posible destruir de manera determinista un objeto de clase como se hace en C++.NET Framework. Person p2. Identidad de objetos frente aIgualdad de valores Al comparar dos objetos para comprobar si son iguales. utilice el método estáticoEquals. // Output: p2 and p1 have the same values.WriteLine("p2 and p1 have the same values. (System.

Equals(Object). la clase TimePeriod almacena un período de tiempo. La clase también puede implementar las interfaces IEquatable(Of T) o IEqualityComparer(Of T). a la vez que se promueve la seguridad y flexibilidad de los métodos. Al diseñar sus propias clases que invaliden Equals. se deben utilizar solo si la clase los ha invalidado o sobrecargado para proporcionar una definición personalizada de lo que significa “igualdad” para los objetos de ese tipo. Ambas interfaces proporcionan métodos que se pueden utilizar para probar si sus valores son iguales. } . Sin embargo.ValueType de Equals utiliza la reflexión porque debe ser capaz de determinar qué son los campos en cualquier struct. Las propiedades pueden utilizarse como si fuesen miembros de datos públicos. se puede obtener acceso a los datos con facilidad. Internamente. escribir o calcular el valor de un campo privado. public double Hours { get { return seconds / 3600. //////////////////////////////////////////////////////////////// Propiedades (Guía de programación de C#) Visual Studio 2010 Otras versiones Una propiedad es un miembro que ofrece un mecanismo flexible para leer.La implementación System. De este modo. asegúrese de seguir las directrices indicadas en Cómo: Definir la igualdad de valores para un tipo (Guía de programación de C#) y Object.  Para determinar si los valores de los campos de dos instancias de clase son iguales. Los descriptores de acceso de la propiedad Hours realizan la conversión entre horas y segundos. En este ejemplo. Al crear sus propios structs. invalide el método Equals para proporcionar un algoritmo de igualdad eficaz específico de su tipo. la clase almacena el tiempo en segundos. aunque en realidad son métodos especiales denominados descriptores de acceso. pero una propiedad denominada Hours permite a un cliente especificar el tiempo en horas. Ejemplo C# class TimePeriod { private double seconds. puede usar el método Equals o el operador ==.

set { seconds = value * 3600. La palabra clave value se usa para definir el valor asignado por el descriptor de acceso set. vea Propiedades autoimplementadas (Guía de programación de C#). ocultando el código de implementación o comprobación. } } } class Program { static void Main() { TimePeriod t = new TimePeriod().Hours). Para obtener más información. t.    ////////////////////////////////////////////////// Interfaces (Guía de programación de C#) Visual Studio 2010 Otras versiones . considere la posibilidad de utilizar propiedades autoimplementadas. En el caso de las propiedades simples que no requieren ningún código de descriptor de acceso personalizado. System.WriteLine("Time in hours: " + t. } } // Output: Time in hours: 24 Información general sobre propiedades   Las propiedades permiten que una clase exponga una manera pública de obtener y establecer valores. // Evaluating the Hours property causes the 'get' accessor to be called. El descriptor de acceso de una propiedad get se utiliza para devolver el valor de la propiedad y el descriptor de acceso set se utiliza para asignar un nuevo valor. Estos descriptores de acceso pueden tener niveles de acceso diferentes.Hours = 24.Console. // Assigning the Hours property causes the 'set' accessor to be called. vea Restringir la accesibilidad del descriptor de acceso (Guía de programación de C#). Las propiedades que no implementan un descriptor de acceso set son de solo lectura. Para obtener más información.

Cuando una clase o struct implementan una interfaz. utilice la palabra claveinterface.Model == car. Sin embargo.Model && this. constructores de instancias. si una clase base implementa una interfaz. como se muestra en el ejemplo siguiente. destructores o tipos. C# interface IEquatable<T> { bool Equals(T obj). con dos excepciones:   Una clase o struct puede implementar más de una interfaz. dicha clase o struct proporciona una implementación para todos los miembros que define la interfaz.Make == car. Cuando una clase o struct implementa una interfaz.Year) . campos. Para definir una interfaz. propiedades. } Las interfaces están compuestas de métodos. } // Implementation of IEquatable<T> interface public bool Equals(Car car) { if (this.} public string Model { get. Los miembros de interfaz son automáticamente públicos y no pueden incluir ningún modificador de acceso. las clases y structs implementan interfaces. set. C# public class Car : IEquatable<Car> { public string Make {get. La propia interfaz no proporciona ninguna funcionalidad que una clase o struct pueda heredar de la manera en que se puede heredar la funcionalidad de una clase base. ya que la propia interfaz no contiene ninguna implementación. No puede contener miembros estáticos. como se muestra en el ejemplo siguiente.Year == car.Make && this. la clase derivada hereda esta implementación. Se dice que la clase derivada implementa la interfaz de forma implícita. set.Las interfaces describen un grupo de funcionalidades relacionadas que pueden pertenecer a cualquier elemento class o struct. recibe sólo los nombres de métodos y las firmas. operadores. Al igual que las clases heredan una clase base o struct. indizadores o cualquier combinación de estos cuatro tipos de miembros. } public string Year { get. set. eventos. Una interfaz no puede contener constantes.

métodos. Para implementar un miembro de interfaz. dicha clase base proporcionará su implementación. Sin embargo. Las interfaces pueden contener eventos. los descriptores de acceso deben coincidir. La clase que implementa la interfaz puede declarar la misma propiedad con los descriptores de acceso get y set.{ return true. } else return false. Las propiedades e indizadores de una clase pueden definir descriptores de acceso adicionales para una propiedad o indizador definidos en una interfaz. una interfaz puede declarar una propiedad que tiene un descriptor de acceso get. a través de las clases base que hereda o de interfaces heredadas por otras interfaces. el miembro correspondiente de la clase debe ser público. vea Propiedades de interfaces (Guía de programación de C#). si la propiedad o el indizador utiliza una implementación explícita. Por ejemplo. vea Clases y miembros de clase abstractos y sellados (Guía de programación de C#). el usuario de la interfaz no necesita saber cómo se implementa. Para obtener más información sobre la implementación explícita. No se pueden crear instancias directamente de una interfaz. la clase puede implementar una interfaz solo una vez y solo si la interfaz se declara como parte de la definición de clase. Si la interfaz se hereda porque se heredó una clase base que implementa esta interfaz. Para obtener más información sobre miembros virtuales. vea Polimorfismo (Guía de programación de C#). Es posible que una clase herede una interfaz varias veces. no estático y tener el mismo nombre y la misma firma que el miembro de interfaz. una clase derivada puede cambiar el comportamiento de la interfaz al invalidar los miembros virtuales. Las interfaces pueden heredar otras interfaces. Información general sobre interfaces Una interfaz tiene las siguientes propiedades:    Una interfaz es como una clase base abstracta: cualquier tipo no abstracto que implementa la interfaz debe implementar todos sus miembros. También es posible que una clase base implemente miembros de interfaz a través de miembros virtuales. Para obtener más información. Sin embargo. } } La interfaz IEquatable(Of T) informa al usuario del objeto de que éste puede determinar si es igual que otros objetos del mismo tipo. En ese caso. . Las interfaces y los miembros de interfaz son abstractos. indizadores y propiedades. como en class ClassName : InterfaceName. las interfaces no proporcionan una implementación predeterminada.

Las clases y structs pueden implementar más de una interfaz.   Las interfaces no contienen implementaciones de métodos. Una interfaz se puede heredar de varias interfaces. ////////////////////////////////////////////// .

_W`»_WU[ZV_bSaW ¼ ¼ ¼   US__ ^[Y^S » _`S`Ub[V SZ´ » W W^[V`ZWcW W^[V´  ¯¯__YZZY`W [a^_\^[\W^` USa_W_`Wú_W`úSUUW__[^`[TWUSWV ` [a^_   ¯¯bSaS`ZY`W [a^_\^[\W^` USa_W_`WúYW`úSUUW__[^`[TWUSWV  _`W[Z_[W^`W ZWûWZ[a^_û` [a^_´ ¼ ¼ ¯¯.

:080:8..#089737.0784308 .  30.070.O3/0  '8:.47 8948/08.//0:9.O3 ...:942502039.4../.7.084809843/08440./08 ./05747../0980:9.83...-7.:3.5.5.0.42574-.084809  .008/0.$9:/4   97.84-7057450/.4-903072E831472..2.O3/0  .:942502039..O34.0845:0/03903073./086:0342502039.!7450/.4708 4.../0850729036:0:3.75947/0.O3  /08.307./05747..5.084/10703908 !.-0../01370./ 0/08.8..O/4/0/08.83.75947/0 .7.75947/0..O3  ...2./04-90307 089...9:7./0.08 :J./05747.//0/08.7:33:0.084507843.75947/0.757450/./4 .5-.0.8 :J.800543..a`\a`WZ[a^_    31472.2.084 :J..084/0:3.75947/0.548-/.7./08....3:3/08..84/0...4..857450/.08480980:9./08  O O .7594708/0 ./.0....57450/.3/40.O/4/02502039.O30307.47.57450/.438/070.../08825086:034706:0703333.857450/.47/0...857450/.07..75947/0..2.4-903072E831472....O3/0  O O O $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ 39071.7.:9./45470/08.7..8 !.08-/..5..

7/0.39071.884897:.070/.804897:..8 ./0870.804897:.2502039.839071...1:3./01472./.48345:0/033.9470849548 45:0/0.39071./6:0:3.34.03948 3/.80/07...39071.:3.5745... 25J.6:0.O3/008948...4308 O O &3.80-.O35..5745.203905-.804897:..339071.345:0/0.. 2502039..39071.808070/..43.9 !. 70.084  :.43. :9.:.48 48202-748/039071.....39071.4389./47/0.95:0/...3/4:3.6:070020394.425:089.2.7.808897:...039071.95:0/02502039.39071.72E8/0:3.92502039.:942E9.94708/0389.3908  ./.070/.92502039..0.7-03:37:54/01:3./0137:3.089...8172.307.804897:./.42480 2:0897..  :.39071..030002548:0390    Z`W^XSUW ]aS`STW » T[[]aS_[T´ ¼   ..07.:.6:07 ..O3 .843.//0:3.43.7.-7.036:0805:0/0070/.8.80-./4708 ./47084.80-.39071.. .804897:..802502039.2548 4507.0 ./08 0.43897:. 33:3.42-3.43/480././.:3.:7 33324/1.08089E3.34574547. . .86:05:0/035079030.43903033:3..839071. 030002548:0390    \aTUUS__S^ ]aS`STWS^ » \aTU_`^ZY SW»YW`_W`¼ \aTU_`^ZY [VW»YW`_W`¼ \aTU_`^ZYWS^»YW`_W`¼  ¯¯ \WWZ`S`[Z[X ]aS`STWZ`W^XSUW \aTUT[[]aS_S^US^´ » X`_ SWUS^ SW  `_ [VWUS^ [VW  `_WS^US^WS^´ .08/08..06:0..8/02F94/48 57450/...08  ..8.9.39071.4390307 202-748089E9.1:3..8 /0897:..:.3.39071.9574547..O3 $0/.43..3:3.7 .982502039.6:0.74 8:3.9749548/0202-748 &3.  :..80 /07..-08O448342-708/02F94/48 .9 ./.3:3.2502039.4390307..80 $302-.:3. /.2502039..43.43.424802:0897.804897:.94/4848202-7486:0/0130.3/4:3.5..05..

2502039.8 .08409 .03948 2F94/48 3/.0..7E8: 2502039...88.808202-748/0.. 48/08.!42471824 :J...3.805:0/03/0137/08. .425479.08409809 $302-.0848202-748/039071.806:02502039..../013.9.08 3080.20394/0../6:0 9030:3/08.70./.80.47708543/0390/0.0..O3 %./08 O O O &3.948.7389.7.80-.57450/..9...././7 !.7.2502039..39071.0834574547.74 8.. 5476:080070/O:3.F8/0.79:.O305J.844:3.97.6:.946:02502039.5:0/0.:3..20390/0:3./05747.7..:./05747.80-.74/04-094/06:0F8905:0/0/090723..7497.839071.-897.084/0-03.80 .806:0070/./.808-.7808:. .4  34089E9.74 .0..4/039071..39071..57450/.O3/0.2.08 $3 02-. 0202-74..80070/0:3.84-7039071.20 $.O384-70202-748.O30307.88:0390857450/.08070/...4-903072E8 31472...39071.7.7594708/0./0-02502039.9030..2-F308548-06:0:3.» ^W`a^Z`^aW ¼ W_W ^W`a^ZXS_W ¼ ¼   ..8...O3 .748202-748./0 5747.6:0795434.857450/.O3570/090723...84 :3..80/0-08075-.085. 39071.7.172...../403/.0.O24802502039. 39071.80-.79:.7.282.084.O305J.-0 1% 31472.4348/08.:8:../08 03/.43.-07.8/70.5:0/0/0. !.57450/..74/0.794/488:8202-748  4805:0/03.839071.7:3.08448.. !4700254 :3.!7450/.O3/0  .8..:3.2.839071...6:00202-74/039071.43.O3/0  31472..839071..2039071.9./4 3/..-897.424 5...42403.79:.839071.7./.-897./47 :9./47/013/4803:3.80574547.08 .9...08 !.80070/.3:3.  !.8547497.80/0.3.39071.7:3..843.7.7./48 :J.39071..424:3./08  .08  &3...F8 /0202-748... 6:0497484-0948/028249540:8:.2.... /.O3/0  .43.../470857450/.089.39071.39071.94880..7594708/0.085:0/03.49030702824342-70..0.2502039.282.4-903072E831472.9..80 .4-903072E831472..75947/0..08 8548-06:0:3..39071.839071.085:0/03070/.80/07.089..39071.08  ../.790/0.806:02502039.39071..7.39071.39071... 2502039./.  . 57450/.97.3430.7:3202-74/039071.08 :J.43903070./4708/0:3...39071.-897.805:0/02502039.43.88....80-.O384-70./08/039071.7594708/0.5:0/0/0.70.8025020390202-748/039071.08.2-.

.39071.805:0/0070/.  &3.839071..43903032502039..839071.808897:.985:0/032502039.0834.39071.7.7/0..4308/02F94/48  .72E8/0:3.O O O  .8.08  ..

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

 .

You're Reading a Free Preview

Descarga
scribd
/*********** DO NOT ALTER ANYTHING BELOW THIS LINE ! ************/ var s_code=s.t();if(s_code)document.write(s_code)//-->