Nombre:Alexandra Maguana
Ciclo:Sexto Sistemas
C#
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:
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.
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()
frm = New Form1()
Para C#
DataTable dt;
dt = new DataTable("TablaClientes");
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
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.
' 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
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 set. Por ejemplo:
- 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
- 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
- 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
|
|
![]() |
Inicializa una
nueva instancia de la clase List<T> que está
vacía y tiene la capacidad inicial predeterminada.
|
|
![]() |
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.
|
|
![]() |
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