miércoles, 9 de abril de 2014

CONSTRUCTORES,PROPIEDADES Y LIST

Nombre:Alexandra Maguana
Ciclo:Sexto Sistemas





Para crear un constructor para una clase, cree un procedimiento denominado Sub New en cualquier parte de la definición de clase. Para crear un constructor parametrizado, especifique los nombres y los tipos de datos de los argumentos de Sub New tal como lo haría en cualquier otro procedimiento, como en el código siguiente:
Sub New(ByVal s As String)
Con frecuencia, los constructores están sobrecargados, como en el código siguiente:
Sub New(ByVal s As String, i As Integer)
Cuando se define una clase derivada de otra, la primera línea del constructor debe ser una llamada al constructor de la clase base, a no ser que ésta tenga un constructor accesible que no requiera parámetros. Por ejemplo, para llamar a la clase base que contiene el constructor anterior, sería MyBase.New(s). En caso contrario, MyBase.New es opcional y el tiempo de ejecución de Visual Basic la llama implícitamente.
Después de escribir el código para llamar al constructor del objeto primario, puede agregar cualquier código de inicialización adicional en el procedimiento Sub New. Sub New puede aceptar argumentos cuando se realiza la llamada como a un constructor con parámetros. Estos parámetros se pasan desde el procedimiento que llama al constructor; por ejemplo, Dim AnObject As New ThisClass(X).
Un constructor es un bloque de código, este bloque de código tiene la forma de un método manteniendo dos reglas fundamentales, la primera es que el nombre del constructor para que sea constructor debe ser el mismo que el de la clase que lo contiene en la definición de C# y en Visual Basic se utiliza únicamente la definición Sub New, esto es, que en C# el constructor de la clase se llamará tal como la clase y en Visual Basic solo se utilizará Sub New, la segunda regla es que la declaración carece de tipo, ya que el constructor como tal construye un tipo (la clase es un tipo) entonces pues no tendrá tipo, bien, pues no debemos olvidar los paréntesis aunque no tenga parámetros.
Los constructores se asemejan a un método pero sin tipo de retorno, y al igual que los métodos, pueden contener parámetros definidos en la declaración entre paréntesis y también pueden ser sobrecargados, así es, un constructor puede tener más de una firma de definición por clase, obviamente que sigue las reglas de sobrecarga para la cuestión de las firmas.
Los constructores son el primer bloque de código que se ejecuta de una clase, este código se ejecuta justo en el momento de instanciar al objeto, esto es, se ejecuta cuando se está utilizando “new”. Como tal, “new” crea la instancia y lanza la ejecución del código del constructor de la clase, el cual realizará las tareas necesarias para inicializar la clase a la que pertenece. La única manera de tener acceso a la funcionalidad de un constructor es mediante la instrucción “new”. La manera de acceder a cada una de las sobrecargas del constructor es al momento de crear la instancia, por ejemplo:
Para VB.NET
Dim frm As Form1
frm = New Form1()
 
Para C#
DataTable dt;
dt = new DataTable("TablaClientes");
 
Bueno, en estos ejemplos vemos como al utilizar new para instanciar la clase en un objeto, o sea en la variable, se utiliza el nombre de la clase con paréntesis, también, como se nota en el segundo ejemplo; estoy utilizando un parámetro para inicializar la clase DataTable en la variable dt.
Bien, para que nuestras clases puedan hacer uso de las ventajas de los constructores solo bastará con declarar estos dentro de la clase. En Visual Basic es sencillo y no se rige como en el caso de C#, veamos cómo es la declaración de un constructor en Visual Basic:
VB.NET
Public Sub New()

End Sub

C#
public Form1()
{

}

Simple, ¿no lo creen? Bueno, pues así de simple y más aún, se pueden extender los constructores de clases ya formadas, por ejemplo, los formularios, y es que es ahí donde toma sentido el uso de un constructor para pasar variables a un formulario sin necesidad de utilizar las variables globales, bien, un formulario define un constructor sin parámetros, mismo que se toma como predeterminado, pero, si nosotros quisiéramos obligar a un formulario a iniciarse con cierto valor, podríamos reemplazar ese constructor por otro con un parámetro, esto es, bastaría con agregar un parámetro de entrada al constructor para obligar a pasar un valor al momento de construir el formulario, algo como esto:
Public Sub New(ByVal Id As Integer      

    ' This call is required by the Windows Form Designer.
       
    InitializeComponent()       
    ' Add any initialization after the InitializeComponent() call.
 
End Sub
Si este es el único constructor dentro del formulario, entonces la única manera de inicializarlo sería de la siguiente manera:
Dim frm As Form1
frm = New Form1(3)
Ahora bien, el valor que paso por el parametro del constructor puedo almacenarlo en un campo privado de la clase, esto es, una variable a nivel de clase declarada como privada para tenerla disponible en todo el formulario. Digamos que podría ser así:
Private mId As Integer
Public
Sub New(ByVal Id As Integer     
    ' This call is required by the Windows Form Designer.
     
    
InitializeComponent()      
    mId = Id 
End Sub
Pues con esto ya tendremos el valor de entrada almacenado en una variable local disponible para toda la clase, de esta manera es como se pueden propagar los valores de una clase a otra y puede ser opcional o puede ser obligatorio, eso dependerá de la naturaleza de cada clase.
Con esto espero que tengan un recurso útil para propagar la información en su aplicación sin depender del uso de variables globales, así entonces, las clases podrán ser más independientes y ser extensibles sin depender de valores que no se encuentran en su propia definición.

Como definir propiedades

 Las propiedades combinan aspectos de los campos y de los métodos. Para el usuario de un objeto, una propiedad es similar a un campo, el acceso a la propiedad requiere la misma sintaxis. Para el implementador de una clase, una propiedad es uno o dos bloques de código que representan un descriptor de acceso get y un descriptor de accesoset. El bloque de código para el descriptor de acceso get se ejecuta cuando se lee la propiedad; el bloque de código para el descriptor de acceso set se ejecuta cuando se asigna un nuevo valor a la propiedad. Una propiedad sin un descriptor de acceso set se considera de sólo lectura. Una propiedad sin un descriptor de acceso get se considera de sólo escritura. Una propiedad con ambos descriptores de acceso es de lectura y escritura.
A diferencia de los campos, las propiedades no están clasificadas como variables. Por lo tanto, no se puede pasar una propiedad como un parámetro ref (Referencia de C#) o out (Referencia de C#).
Las propiedades tienen muchos usos:

Validan datos antes de permitir un cambio; exponen datos de forma transparente en una clase donde se recuperan realmente los datos de otro origen, como una base de datos; realizan una acción cuando se modifican datos, por ejemplo, provocar un evento, o cambian el valor de otros campos.
Las propiedades se declaran en el bloque de clase especificando el nivel de acceso del campo, seguido por el tipo de la propiedad, por el nombre de la propiedad y por un bloque de código que declara un descriptor de accesoget y/o un descriptor de acceso setPor ejemplo:

  1. Agregue el código siguiente para agregar una propiedad de lectura y escritura llamada FullName. El descriptor de acceso Get devuelve el nombre del empleado. El descriptor de acceso Set utiliza el parámetro Value que se pasa en el descriptor de acceso Set para establecer el nombre del empleado.
Public Property FullName() As String
   Get
      Return Me.Name
   End Get
   Set(ByVal Value As String)
      Me.Name = Value
 End Set
End Property
  1. Agregue el código siguiente para agregar una propiedad ReadOnly llamada Remuneration. El descriptor de acceso Get devuelve el sueldo del empleado. No hay ningún descriptor de acceso Set porque el sueldo no se puede establecer directamente; la única forma de cambiar el sueldo es llamar al método PayRise.
Public ReadOnly Property Remuneration() As Decimal
   Get
      Return Me.Salary
   End Get
End Property
  1. Agregue el código siguiente para agregar otra propiedad ReadOnly llamada DaysSinceJoined. El descriptor de acceso Get calcula cuántos días ha trabajado el empleado para la compañía.
Public ReadOnly Property DaysSinceJoined() As Integer
   Get
      Dim timespan As TimeSpan = DateTime.Now.Subtract(Me.HireDate)
      return timespan.Days
   End Get
End Property
LIST

Representa una lista de objetos fuertemente tipados a la que se puede obtener acceso por índice. Proporciona métodos para buscar, ordenar y manipular listas.
Inicializa una nueva instancia de la clase List<T>.
En muchas aplicaciones se desea poder crear y administrar grupos de objetos relacionados. Existen dos formas de agrupar objetos: mediante la creación de matrices de objetos y mediante la creación de colecciones de objetos.

Las matrices son muy útiles para crear y trabajar con un número fijo de objetos fuertemente tipados.

Las colecciones proporcionan un método más flexible para trabajar con grupos de objetos. A diferencia de las matrices, el grupo de objetos con el que trabaja puede aumentar y reducirse dinámicamente a medida que cambian las necesidades de la aplicación. Para algunas colecciones, puede asignar una clave a cualquier objeto que incluya en la colección para que pueda recuperar rápidamente el objeto con la clave asignada.

Una colección es una clase, de modo que antes de poder agregar elementos a una nueva colección, debe declararla.

Si su colección se limita a elementos de solo un tipo de datos, puede utilizar una de las clases en el espacio de nombres System.Collections.Generic. Una colección genérica cumple la seguridad de tipos para que ningún otro tipo de datos se pueda agregar a ella. Cuando recupera un elemento de una colección genérica, no tiene que determinar su tipo de datos ni convertirlo.

Nombre
Descripción
Descripción: Método público
Inicializa una nueva instancia de la clase List<T> que está vacía y tiene la capacidad inicial predeterminada.
Descripción: Método público
Inicializa una nueva instancia de la clase List<T> que contiene elementos copiados de la colección especificada y tiene una capacidad suficiente para aceptar el número de elementos copiados.
Descripción: Método público
Inicializa una nueva instancia de la clase List<T> que está vacía y tiene la capacidad inicial especificada.

Dim states As List(Of String) = New List(Of String) _
    (New String() {"AL", "AZ", "CA", "CO", "NV", "OK"})
List<string> states =
     new List<string>() { "AL", "AZ", "CA", "CO", "NV", "OK" };
En .Net se puede crear e inicializar un Arreglo de Strings o una lista Genérica “List” en C#, usando una lista delimitada por comas. Sin embargo, la única forma que yo he encontrado hasta el momento de hacer los mismo con una lista genérica en VB.NET “List(of Strings)”, es usando un arreglo de Strings como parte de la lista tal y como lo muestro en el siguiente código.
VB.NET
1
2
Dim states As List(Of String) = New List(Of String) _
    (New String() {"AL", "AZ", "CA", "CO", "NV", "OK"})
C#
1
2
List<string> states =
     new List<string>() { "AL", "AZ", "CA", "CO", "NV", "OK" };

BIBLIOGRAFIA





No hay comentarios:

Publicar un comentario