P. 1
Matrices Multidimensionales

Matrices Multidimensionales

|Views: 2|Likes:

More info:

Published by: Dhanny Vilcahuaman Alvinagorta on Feb 04, 2013
Copyright:Attribution Non-commercial

Availability:

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

11/19/2014

pdf

text

original

La clase Array es la clase base para las implementaciones de lenguajes que admiten matrices.

No obstante, el sistema y los compiladores son los únicos que se pueden derivar explícitamente de la clase Array. Los usuarios deben utilizar los constructores de matriz que proporciona el lenguaje. Un elemento es un valor de Array. La longitud de Array es el número total de elementos que puede contener. El rango de Array es el número de dimensiones de Array. El límite inferior de una dimensión de Array es el índice inicial de dicha dimensión; Array multidimensional Arraypuede tener distintos límites para cada dimensión. Matrices multidimensionales Las matrices pueden tener varias dimensiones. Por ejemplo, la siguiente declaración crea una matriz bidimensional de cuatro filas y dos columnas: int[,] array = new int[4, 2]; Esta otra declaración crea una matriz de tres dimensiones, 4, 2 y 3: int[, ,] array1 = new int[4, 2, 3]; Inicialización de matrices La matriz se puede inicializar en la declaración como se muestra en el ejemplo siguiente: int[,] array2D = new int[,] { { 1, 2 }, { 3, 4 }, { 5, 6 }, { 7, 8 } }; int[, ,] array3D = new int[,,] { { { 1, 2, 3 } }, { { 4, 5, 6 } } }; También se puede inicializar la matriz sin especificar el rango: int[,] array4 = { { 1, 2 }, { 3, 4 }, { 5, 6 }, { 7, 8 } }; Si opta por declarar una variable de matriz sin inicializarla, deberá utilizar el operador new para asignar una matriz a la variable. Por ejemplo: int[,] array5; array5 = new int[,] { { 1, 2 }, { 3, 4 }, { 5, 6 }, { 7, 8 } }; // OK //array5 = {{1,2}, {3,4}, {5,6}, {7,8}}; // Error Asimismo, es posible asignar un valor a un elemento de una matriz, por ejemplo:

Los paréntesis vacíos indican que el método no requiere ningún parámetro.AddGas(15). moto. 10].StartEngine(). el valor devuelto. Esta clase contiene tres métodos: class Motorcycle { public void StartEngine() { } public void AddGas(int gallons) { } public int Drive(int miles. Los argumentos se enumeran entre paréntesis y separados por comas. el nombre del método y los parámetros de método. Por tanto. el nombre del método y paréntesis. Los métodos se declaran en una clase o estructura especificando el nivel de acceso. 1] = 25. El ejemplo de código siguiente inicializa las variables de matriz con el valor predeterminado (salvo las matrices escalonadas): int[. Parámetros de métodos . int speed) { return 0. Después del nombre de objeto. } } Llamar a un método en un objeto es similar a tener acceso a un campo.] array6 = new int[10. cada instrucción se ejecuta en el contexto de un método. Los parámetros de método se incluyen entre paréntesis y separados por comas. 20). se puede llamar a los métodos de la clase Motorcycle del modo siguiente: Motorcycle moto = new Motorcycle(). Métodos Los métodos son un bloque de código que contiene una serie de instrucciones. moto. En C#. agregue un punto.Drive(5.array5[2. moto.

Se podría esperar que este cambio se reflejara en el método PassesInteger una vez que TakeInteger devuelve un valor. siempre y cuando no sean parámetros o variables declaradas en ese método. } Aquí un método denominado PassesInteger pasa un argumento a un método denominado TakesInteger. En PassesInteger el argumento se denomina fortyFour. vea Pasar parámetros de tipo de valor (Guía de programación de C#). se hace una referencia al objeto que se utiliza como argumento del método y se pasa dicha referencia. Dado que son copias. Observe que TakesInteger asigna un nuevo valor al argumento proporcionado. TakesInteger(fortyFour). el valor de la variable fortyFour se mantiene sin cambios. se pasa una copia en lugar del propio objeto. Esto se debe a que int es un tipo de valor. los argumentos de entrada se denominan parámetros. Cuando un objeto basado en un tipo de referencia se pasa a un método. pero en TakeInteger es un parámetro denominado i. para pasar argumentos a un método simplemente hay que proporcionarlos entre paréntesis cuando se llama al método. vea Tabla de tipos de valores (Referencia de C#). Los tipos de valor reciben su nombre del hecho de que se pasa una copia del objeto en lugar del propio objeto. El nombre no tiene por qué ser igual que el argumento. De forma predeterminada. cualquier cambio realizado en el parámetro no tiene ningún efecto en el método de llamada. En el método al que se llama. cuando un tipo de valor se pasa a un método. que se pasan por referencia. Este parámetro sólo existe dentro del método TakesInteger. Esto es diferente de los tipos de referencia. Para obtener una lista de tipos de valores integrales de C#.Como se muestra en el fragmento de código anterior. Un tipo de referencia se crea con la palabra clave class. Los cambios realizados a través de esta referencia se reflejarán por consiguiente en el método de llamada. } static void TakesInteger(int i) { i = 33. Para obtener más información sobre el paso de tipos de valor. Se pasa el valor. Otras variables también pueden denominarse i y pueden ser de cualquier tipo. Los parámetros que un método recibe también se proporcionan entre paréntesis. pero de hecho. pero se debe especificar el tipo y nombre de cada parámetro. En su lugar. Por ejemplo: public static void PassesInteger() { int fortyFour = 44. de la forma siguiente: . no se realiza ninguna copia del objeto. pero no el objeto mismo.

Por ejemplo: public static void TestRefType() { SampleRefType rt = new SampleRefType(). rt. el método TestRefType mostrará el valor 33. la modificación realizada por ModifyObject se efectúa en el objeto creado en el método TestRefType. } Ahora. Pero.WriteLine(rt. como se utiliza un tipo de referencia. se pasará por referencia. Sin la palabra clave return. una instrucción return sin ningún valor sigue siendo útil para detener la ejecución del método.value = 44. } static void ModifyObject(SampleRefType obj) { obj. int number2) { return number1 + number2.Console. vea Pasar parámetros Reference-Type (Guía de programación de C#) y Tipos de referencia (Referencia de C#). System.value = 33. seguida de un valor que coincida con el tipo de valor devuelto. Valores devueltos Los métodos pueden devolver un valor al llamador. ModifyObject(rt). Por consiguiente. Si el tipo de valor devuelto es void. Una instrucción con la palabra clave return. el método detendrá la ejecución cuando llegue al fin del bloque de código. Para obtener más información. Por ejemplo. Es necesario que los métodos con un tipo de valor devuelto no nulo utilicen la palabra clave return para devolver un valor. estos dos métodos utilizan la palabra clave return para devolver enteros: class SimpleMath { public int AddTwoNumbers(int number1. devolverá ese valor al llamador del método. La palabra clave return también detiene la ejecución del método. el método puede devolver el valor mediante la palabra clave return. } . } Este ejemplo hace esencialmente lo mismo que el ejemplo anterior.public class SampleRefType { public int value.value). si un objeto basado en este tipo se pasa a un método. Si el tipo de valor devuelto (el que aparece antes del nombre de método) no es void.

AddTwoNumbers(1.SquareANumber(obj. public interface IDrawingObject { event EventHandler ShapeChanged. el método de llamada puede utilizar la propia llamada del método en cualquier parte donde un valor del mismo tipo sea suficiente. void ChangeShape() { // Do something before the event… OnShapeChanged(new MyEventsArgs(…)).SquareANumber(result). Básicamente. las reglas son las mismas que cuando se implementa cualquier método de interfaz o propiedad. en este caso result. El valor devuelto también se puede asignar a una variable.public int SquareANumber(int number) { return number * number. } } Para emplear un valor devuelto por un método. Para implementar eventos de interfaz en una clase • Declare el evento en la clase y. 2)). 2). Por ejemplo. } public class MyEventArgs : EventArgs {…} public class Shape : IDrawingObject { event EventHandler ShapeChanged. a continuación. para almacenar un valor es opcional. los dos ejemplos de código siguientes logran el mismo objetivo: int result = obj. // or do something after the event. obj. El uso de una variable intermedia. } protected virtual void OnShapeChanged(MyEventArgs e) { . invóquelo en los lugares adecuados. El ejemplo siguiente muestra cómo implementar eventos de interfaz en una clase. obj.AddTwoNumbers(1. La legibilidad del código puede ser útil o puede ser necesaria si el valor se va a utilizar más de una vez. Cómo: Implementar eventos de interfaz (Guía de programación de C#) Una interfaz puede declarar un evento.

} // Base class event publisher inherits two // interfaces. e). event EventHandler PostDrawEvent. puede especificar si los dos eventos se representan mediante el mismo evento en la clase o mediante eventos diferentes. each with an OnDraw event public class Shape : IDrawingObject. En el ejemplo siguiente. Cuando escriba una implementación de interfaz explícita para un evento. } . Por ejemplo. event EventHandler OnDraw. IShape { // Create an event for each interface event event EventHandler PreDrawEvent. namespace WrapTwoInterfaceEvents { using System. pero en este caso no es así. los suscriptores determinan qué evento OnDraw se recibirá convirtiendo la referencia de la forma en IShape o IDrawingObject. puede asociar cada evento a una implementación distinta en la clase. public interface IDrawingObject { // Raise this event before drawing // the object. // Explicit interface implementation required.OnDraw { add { PreDrawEvent += value. } public interface IShape { // Raise this event after drawing // the shape. En esta situación. // Associate IDrawingObject's event with // PreDrawEvent event EventHandler IDrawingObject. Normalmente. } Ejemplo El ejemplo siguiente muestra cómo controlar la situación menos común en la que la clase se hereda de dos o más interfaces y cada interfaz tiene un evento con el mismo nombre. debe proporcionar una implementación de interfaz explícita para al menos uno de los eventos. Al proporcionar sus propios descriptores de acceso. también debe incluir los descriptores de acceso a eventos add y remove. event EventHandler OnDraw. si los eventos deben producirse en momentos diferentes según las especificaciones de la interfaz.} } if(ShapeChanged != null) { ShapeChanged(this. estos descriptores los proporciona el compilador.

// Associate IShape's event with // PostDrawEvent event EventHandler IShape."). new EventArgs()). if (handler != null) { handler(this. } } // Explicit interface implementation required. } Console. } void d_OnDraw(object sender.").").OnDraw += new EventHandler(d_OnDraw). public void Draw() { // Raise IDrawingObject's event before the object is EventHandler handler = PreDrawEvent. // RaiseIShape's event after the object is drawn. } void d_OnDraw(object sender.OnDraw { add { PostDrawEvent += value. } } . } drawn. } } // For the sake of simplicity this one method // implements both interfaces. EventArgs e) { Console. d.WriteLine("Drawing a shape.WriteLine("Sub1 receives the IDrawingObject event. } remove { PostDrawEvent -= value. handler = PostDrawEvent. EventArgs e) { Console. } } // References the shape object as an IShape public class Subscriber2 { public Subscriber2(Shape shape) { IShape d = (IShape)shape. d.OnDraw += new EventHandler(d_OnDraw). new EventArgs()).WriteLine("Sub2 receives the IShape event. } } public class Subscriber1 { // References the shape object as an IDrawingObject public Subscriber1(Shape shape) { IDrawingObject d = (IDrawingObject)shape.remove { PreDrawEvent -= value. if (handler != null) { handler(this.

Subscriber2 sub2 = new Subscriber2(shape). Console. shape.").public class Program { static void Main(string[] args) { Shape shape = new Shape(). Subscriber1 sub = new Subscriber1(shape).Draw().ReadLine(). Drawing a shape. } } } Resultados Sub1 receives the IDrawingObject event. Sub2 receives the IShape event.WriteLine("Press Enter to close this window. . Console.

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)//-->