Está en la página 1de 10

Guía No. 2 1.

¿Qué es una clase?

Una "clase" es un elemento que actúa como una plantilla que define
las características y comportamientos de una entidad. En C#
podemos decir que todo es una "clase", ya que como podemos ver
incluso el método principal "Main" está dentro de una "clase" y así
se creó por defecto.

2. ¿Para qué se utiliza una clase?

Es una construcción que permite crear tipos personalizados propios


mediante la agrupación de variables de otros tipos, métodos y
eventos, una clase es como un plano definiendo los datos
declarando un código en particularidad.

3. Escriba los pasos para crear una clase.

Para crear una clase dinámica personalizada

1. Inicie Visual Studio.

2. Seleccione Crear un proyecto.

3. En el cuadro de diálogo Crear un proyecto nuevo,


seleccione C# o Visual Basic, después Aplicación de
consola y luego Siguiente.

4. En el cuadro de diálogo Configurar el nuevo proyecto,


escriba DynamicSample como Nombre del proyecto y,
después, seleccione Siguiente.
5. En el cuadro de diálogo Información adicional,
seleccione .NET 5.0 (actual) para Plataforma de destino y
después Crear.

El proyecto nuevo se crea.

6. En el Explorador de soluciones, haga clic con el botón


derecho en el proyecto DynamicSample y
seleccione Agregar > Clase. En el cuadro Nombre,
escriba ReadOnlyFile y, después, seleccione Agregar.

Se agrega un nuevo archivo que contiene la clase ReadOnlyFile.

7. En la parte superior del


archivo ReadOnlyFile.cs o ReadOnlyFile.vb, agregue el
código siguiente para importar los espacios de
nombres System.IO y System.Dynamic.

C#Copiar

using System.IO;

using System.Dynamic;

8. El objeto dinámico personalizado usa una enumeración para


determinar los criterios de búsqueda. Antes de la instrucción
de clase, agregue la siguiente definición de enumeración.

C#Copiar

public enum StringSearchOption

StartsWith,

Contains,

EndsWith

9. Actualice la instrucción de clase para heredar la


clase DynamicObject, como se muestra en el ejemplo de
código siguiente.
C#Copiar

class ReadOnlyFile : DynamicObject

10. Agregue el código siguiente a la


clase ReadOnlyFile para definir un campo privado para la ruta
de acceso y un constructor para la clase ReadOnlyFile.

C#Copiar

// Store the path to the file and the initial line count value.

private string p_filePath;

// Public constructor. Verify that file exists and store the path in

// the private variable.

public ReadOnlyFile(string filePath)

if (!File.Exists(filePath))

throw new Exception("File path does not exist.");

p_filePath = filePath;

11. Agregue el método GetPropertyValue siguiente a la


clase ReadOnlyFile. El método GetPropertyValue toma como
entrada criterios de búsqueda y devuelve las líneas de un
archivo de texto que coinciden con los criterios de búsqueda.
Los métodos dinámicos proporcionados por la
clase ReadOnlyFile llaman al método GetPropertyValue para
recuperar los resultados correspondientes.
C#

public List<string> GetPropertyValue(string propertyName,

StringSearchOption StringSearchOption =
StringSearchOption.StartsWith,

bool trimSpaces = true)

StreamReader sr = null;

List<string> results = new List<string>();

string line = "";

string testLine = "";

try

sr = new StreamReader(p_filePath);

while (!sr.EndOfStream)

line = sr.ReadLine();

// Perform a case-insensitive search by using the specified


search options.

testLine = line.ToUpper();

if (trimSpaces) { testLine = testLine.Trim(); }

switch (StringSearchOption)
{

case StringSearchOption.StartsWith:

if (testLine.StartsWith(propertyName.ToUpper()))
{ results.Add(line); }

break;

case StringSearchOption.Contains:

if (testLine.Contains(propertyName.ToUpper()))
{ results.Add(line); }

break;

case StringSearchOption.EndsWith:

if (testLine.EndsWith(propertyName.ToUpper()))
{ results.Add(line); }

break;

catch

// Trap any exception that occurs in reading the file and return
null.

results = null;

finally

if (sr != null) {sr.Close();}

}
return results;

12. Después del método GetPropertyValue, agregue el


código siguiente para invalidar el método TryGetMember de la
clase DynamicObject. Se llama al
método TryGetMember cuando se solicita un miembro de una
clase dinámica y no se especifican argumentos. El
argumento binder contiene información sobre el miembro al
que se hace referencia y el argumento result hace referencia
al resultado devuelto para el miembro especificado. El
método TryGetMember devuelve un valor booleano que
devuelve true si el miembro solicitado existe. En caso
contrario, devuelve false.

C#Copiar

// Implement the TryGetMember method of the DynamicObject class


for dynamic member calls.

public override bool TryGetMember(GetMemberBinder binder,

out object result)

result = GetPropertyValue(binder.Name);

return result == null ? false : true;

13. Después del método TryGetMember, agregue el código


siguiente para invalidar el método TryInvokeMember de la
clase DynamicObject. Se llama al
método TryInvokeMember cuando se solicita un miembro de
una clase dinámica con argumentos. El
argumento binder contiene información sobre el miembro al
que se hace referencia y el argumento result hace referencia
al resultado devuelto para el miembro especificado. El
argumento args contiene una matriz de los argumentos que se
pasan al miembro. El método TryInvokeMember devuelve un
valor booleano que devuelve true si el miembro solicitado
existe. En caso contrario, devuelve false.

La versión personalizada del método TryInvokeMember espera que


el primer argumento sea un valor del
enumerador StringSearchOption que se ha definido en un paso
anterior. El método TryInvokeMember espera que el segundo
argumento sea un valor booleano. Si uno o ambos argumentos son
valores válidos, se pasan al método GetPropertyValue para
recuperar los resultados.

C#Copiar

// Implement the TryInvokeMember method of the DynamicObject


class for

// dynamic member calls that have arguments.

public override bool TryInvokeMember(InvokeMemberBinder binder,

object[] args,

out object result)

StringSearchOption StringSearchOption =
StringSearchOption.StartsWith;

bool trimSpaces = true;

try

if (args.Length > 0) { StringSearchOption =


(StringSearchOption)args[0]; }

catch
{

throw new ArgumentException("StringSearchOption argument


must be a StringSearchOption enum value.");

try

if (args.Length > 1) { trimSpaces = (bool)args[1]; }

catch

throw new ArgumentException("trimSpaces argument must be


a Boolean value.");

result = GetPropertyValue(binder.Name, StringSearchOption,


trimSpaces);

return result == null ? false : true;

14. Guarde y cierre el archivo.

4. Defina: ➢ Miembros de la clase ✓ Atributos ✓ ✓ Métodos ✓


Constructores ✓ Destructores ✓ Clases anidadas

1. Miembros de la clase
Los miembros de un tipo incluyen todos los métodos, campos,
constantes, propiedades y eventos. En C#, no hay métodos ni
variables globales como en otros lenguajes. Incluso se debe
declarar el punto de entrada de un programa, el método Main,
dentro de una clase o estructura (de forma implícita cuando usa
instrucciones de nivel superior).

2. Atributos

Los atributos son elementos de código que permiten proporcionar


información relativa a otros elementos de una aplicación.

3. Métodos

Un método en C# es una secuencia de enunciados dentro de una


unidad lógica en nuestro programa. Son una de las partes
esenciales en cualquier aplicación, y proporcionan una forma
poderosa de ejecutar operaciones de forma ordenada.

4. Constructores

Los constructores permiten al programador establecer valores


predeterminados, limitar la creación de instancias y escribir código
flexible y fácil de leer. En C# podemos definir un método que se
ejecute inicialmente y en forma automática. Este método se lo llama
constructor.

5. Destructores

Un destructor en programación orientada a objetos es una función


miembro especial llamadas automáticamente en la ejecución del
programa, y por tanto no tienen por qué ser llamadas
explícitamente por el programador.

6. Clases anidadas

Las clases anidadas te permiten agrupar lógicamente clases que


solo se utilizan en un lugar, por lo tanto, esto aumenta el uso de la
encapsulación y crea un código más fácil de leer y de mantener.
Una clase anidada no existe independientemente de su clase
adjunta.
5. ¿Qué son los niveles de acceso?

Los modificadores de acceso indican el nivel de accesibilidad que


tendrá un miembro o un tipo desde otros miembros que lo
referencien. Existen cuatro modificadores de acceso en C#. Es el
modificador menos restrictivo. No existen restricciones para
el acceso a los miembros o tipos que se hayan definido mediante
public.

public

Es el modificador menos restrictivo. No existen restricciones para


el acceso a los miembros o tipos que se hayan definido
mediante public.

private

Los miembros privados sólo son accesibles dentro de la clase en


la que se definen. Es por tanto el modificador más restrictivo.

internal

El modificador internal indica que aquellos miembros o tipos que se


hayan definido con este modificador de acceso sólo serán
accesibles desde los archivos del mismo ensamblado.

protected

El modificador protected indica que sólo la clase en la que se ha


utilizado el modificador y sus clases derivadas tendrán acceso
al miembro o tipo definido como protected.

También podría gustarte