InicioArticulos y noticiasBases de datosProgramaciónForosInternetServiciosContratacionEmail
Tutorial C#
Introduccion a C#
Programacion con C#
Fundamentos de C#
Operadores
Instrucciones
Estrcuturas de control.
Definición de clases
Creación de objetos
Herencia y métodos virtuales
Polimorfismo
Ocultación de miembros
Miembros de tipo
Encapsulación
Espacios de nombres
Importación de espacios de nombres
Espacio de nombres distribuidos
Variables y tipos de datos
Tablas unidimensionales
Tablas multidimensionales
La clase System.Array
Cadenas de texto
Constantes
Orden de inicialización de variables
Métodos
Métodos externos
Constructores
Destructores
Propiedades
Indizadores
Redefinición de operadores
Delegados y eventos
La clase MulticastDelegate
Llamadas asíncronas
Implementación interna de los delegados
Eventos
Estructuras
Boxing y unboxing
Constructores de estructuras
Enumeraciones
Interfaces
Excepciones
Otras instrucciones
Atributos
Definición de nuevos atributos
Lectura de atributos en tiempo de ejecución
Atributos de compilación
Pseudoatributos
Código inseguro
Definición de punteros
Manipulación de punteros
Operadores relacionados con código inseguro
Fijación de variables apuntadas
Novedades de C# 2.0
Genéricos
Tipos parciales
Iteradores
Mejoras en la manipulación de delegados
Tipos anulables
Modificadores de visibilidad de bloques get y set
Clases estáticas
Referencias a espacios de nombres
Supresión temporal de avisos
Atributos condicionales
Incrustación de tablas en estructuras
Modificaciones en el compilador
También puedes ver ...
Serialización: XmlSerializer y BinaryFormater
Handler para manipular imagenes
Conversiones de tipos personalizadas (VB y C#)
Compresión por gzip y deflate
La página Web que está abriendo contiene tanto elementos seguros como no seguros.
Cómo insertar un fichero .xml en un campo de tipo XML de SQL server 2005 o 2008
Comparativa de sentencias VB.Net vs C#
Aprende Ajax desde cero
Creando cadenas de conexión ConnectionStrings en .net 3.5 o visual Studio 2008 usando SqlConnectionStringBuilder
Migración de WSE a WCF (Web Services de 2005 a 2008)

Afiliados
La Web del programador
MundoProgramacion


Indizadores

Concepto de indizador

    Un indizador es una definición de cómo se puede aplicar el operador de acceso a tablas ([ ]) a los objetos de un tipo de dato. Esto es especialmente útil para hacer más clara la sintaxis de acceso a elementos de objetos que puedan contener colecciones de elementos, pues permite tratarlos como si fuesen tablas normales.

    Los indizadores permiten definir código a ejecutar cada vez que se acceda a un objeto del tipo del que son miembros usando la sintaxis propia de las tablas, ya sea para leer o escribir. A diferencia de las tablas, los índices que se les pase entre corchetes no tiene porqué ser enteros, pudiéndose definir varios indizadores en un mismo tipo siempre y cuando cada uno tome un número o tipo de índices diferente.

Definición de indizador

A la hora de definir un indizador se usa una sintaxis parecida a la de las propiedades:


<tipoIndizador> this[<índices>]
{
 set
 {
  <códigoEscritura>
 }
 
 get
 {
  <códigoLectura>
 }
}

    Las únicas diferencias entre esta sintaxis y la de las propiedades son:

  • El nombre dado a un indizador siempre ha de ser this, pues carece de sentido poder darle cualquiera en tanto que a un indizador no se accede por su nombre sino aplicando el operador [ ] a un objeto. Por ello, lo que diferenciará a unos indizadores de otros será el número y tipo de sus <índices>.

  • En <índices> se indica cuáles son los índices que se pueden usar al acceder al indizador. Para ello la sintaxis usada es casi la misma que la que se usa para especificar los parámetros de un método, sólo que no se admite la inclusión de modificadores ref, out o params y que siempre ha de definirse al menos un parámetro. Obviamente, el nombre que se dé a cada índice será el nombre con el que luego se podrá acceder al mismo en los bloques set/get.

  • No se pueden definir indizadores estáticos, sino sólo indizadores de objetos.

    Por todo lo demás, la sintaxis de definición de los indizadores es la misma que la de las propiedades: pueden ser de sólo lectura o de sólo escritura, da igual el orden en que se definan sus bloques set/get, dentro del bloque set se puede acceder al valor a escribir a través del parámetro especial value del tipo del indizador, el código del bloque get ha de devolver un objeto de dicho tipo, etc.                                                                                                                    

    A continuación se muestra un ejemplo de definición de una clase que consta de dos indizadores: ambos permiten almacenar elementos de tipo entero, pero uno toma como índice un entero y el otro toma dos cadenas:

 
 using System;
 
 public class A
 {
  public int this[int índice]
  {
   set
   {
    Console.WriteLine("Escrito {0} en posición {1}", value, índice);
   }
   get
   {          
    Console.WriteLine("Leído 1 de posición {0}",  índice);
    return 1;
   }
  }
  
  public int this[string cad1, string cad2]
  {
   set
   {
    Console.WriteLine("Escrito {0} en posición ({1},{2})"
, value, cad1, cad2);
   }
   get
   {
    Console.WriteLine("Leído 2 de posición ({0},{1})", cad1, cad2);
    return 2;
   }
  }

Acceso a indizadores

    Para acceder a un indizador se utiliza exactamente la misma sintaxis que para acceder a una tabla, sólo que los índices no tienen porqué ser enteros sino que pueden ser de cualquier tipo de dato que se haya especificado en su definición. Por ejemplo, accesos válidos a los indizadores de un objeto de la clase A definida en el epígrafe anterior son:


A obj = new A();
obj[100] = obj["barco", "coche"];

    La ejecución de la asignación de este ejemplo producirá esta salida por pantalla:


Leído 2 de posición (barco, coche)

Escrito 2 en posición 100

Implementación interna de indizadores

    Al igual que las propiedades, para facilitar la interoperabilidad entre lenguajes los indizadores son también convertidos por el compilador en llamadas a métodos cuya definición se deduce de la definición del indizador. Ahora los métodos son de la forma:


<tipoIndizador> get_Item(<índices>)
{
    <códigoLectura>
}
void set_Item(<índices>, <tipoIndizador> value)
{
    <códigoEscritura>
}

    Nuevamente, hay que tener cuidado con la signatura de los métodos que se definan en una clase ya que como la de alguno coincida con la generada automáticamente por el compilador para los indizadores se producirá un error de ambigüedad.


Inicio | Tutorial C# PropiedadesTutorial C#Redefinición de operadores Versión para imprimir Foros de consulta

 
get y set por eedwincc
Respuesta recibida el [02/05/2008 11:33:42]
por favor mostrar como trabajar con getsqlquery para una videotienda

 
Pregunta por Vanesa
Respuesta recibida el [17/05/2008 02:42:56]
Hola a todos q tal pues quisiera hacer una consulta o mejor dicho necesito de su ayuda al ejecutar este programa el indizador tiene algo magico porque retorna un entero porque set indica que a la posicion ingresale 2 espero me entiendan es q nos ha dejado de tarea investigar que es lo que hace este programa y porque?
Espero me puedan ayudar
Gracias
Me pueden escribir a fanybellaj@gmail.com


Añadir comentario ... Para preguntar utiliza los foros
Autor:

Título:


Para preguntar utiliza los foros.



Inicio | Tutorial C# PropiedadesTutorial C#Redefinición de operadores Versión para imprimir

Indizadores
Autor: José Antonio González Seco
Visitas: 7726 Fecha de publicación: 13/10/2006
José Antonio es experto en tecnologias Microsoft. Imparte cursos y conferencias en congresos sobre C# y .NET en Universidades de toda España (Sevilla, Barcelona, San Sebastián, Valencia, Oviedo, etc.) en representación de grandes empresas como Microsoft.




Visitas: 201 | Comentarios: 0 | Archivo: Articulos
Categorias: C#
Visitas: 315 | Comentarios: 1 | Archivo: Articulos
Visitas: 390 | Comentarios: 1 | Archivo: Articulos
Categorias: Humor
Visitas: 615 | Comentarios: 3 | Archivo: Articulos
Categorias: C#|ASP.NET
Visitas: 1177 | Comentarios: 4 | Archivo: Articulos
Visitas: 697 | Comentarios: 1 | Archivo: Articulos
Categorias: ASP.NET|ASP|Windows XP|Windows 2003
Visitas: 828 | Comentarios: 2 | Archivo: Articulos
Categorias: Java|Solaris
Visitas: 584 | Comentarios: 0 | Archivo: Articulos
Visitas: 1484 | Comentarios: 1 | Archivo: Articulos
Categorias: ADO.NET
Visitas: 1533 | Comentarios: 3 | Archivo: Articulos
Categorias: ASP.NET

Útimos temas recibidos en los foros ...
Manual Visual Studio.NET por Shiko ... [Visual Basic .NET] 34 26/10/2006
llamar procedimientos de pl/sql en java por jhon ... [ORACLE] 0 03/07/2009
consulta multitablas por anga ... [mySQL] 0 03/07/2009
objetos helper php bajo oracle por objetos_helper_oracle ... [ISAPI] 0 02/07/2009
ranuras isa o pci por sara ... [Access] 5 30/03/2006
descargar tutorial C# por afmp ... [C#] 54 14/10/2008
Tutorial TOAD para Oracle en Español por ijpj ... [ORACLE] 19 14/03/2009
quiero mi numero de mi autogenerado por pablo ... [Visual Basic .NET] 1 15/06/2009
Ayuda con cargar fotografias de otra pc por Alex ... [ASP.NET] 0 01/07/2009
splash screen por zelca ... [Visual Basic .NET] 0 01/07/2009
Error de inicio de aplicación por Danrre ... [C#] 0 30/06/2009
sumar los precios de la columna "precio" del grig por jardinderosas ... [C#] 7 01/11/2007

Access CGI JSP ORACLE UNIX
Actualidad HTML/DHTML/XHTML LINUX PHP Visual Basic .NET
ASP ISAPI MS DOS Power Builder Visual Basic 6.0
ASP.NET Java mySQL SQL WIN 98/NT/2000/XP
C# JavaScript Opinion SQL Server

devjoker  Te recomendamos además ...
21/07/2006 Funciones integradas de PL/SQL    forma parte de...Tutorial PL/SQL
14/01/2008 Novedades Visual Studio 2008 DataSet en 3 capas o MVC
12/06/2007 Estructuras de control en Transact SQL    forma parte de...Tutorial de Transact SQL
01/06/2006 Cursores de actualización en PL/SQL    forma parte de...Tutorial PL/SQL
01/01/2006 Borrado de datos. DELETE    forma parte de...Tutorial SQL
13/04/2008 Métodos Extensores: INNER JOIN    forma parte de...Linq y Métodos extensores
28/06/2006 Excepciones en PL/SQL    forma parte de...Tutorial PL/SQL
03/10/2006 Herencia y métodos virtuales    forma parte de...Tutorial C#
14/07/2007 Como encriptar texto y variables usando algoritmos estandard como DES o TRIPLEDES
03/10/2006 Creación de objetos    forma parte de...Tutorial C#

 

Encuesta
¿A que perfil te adaptas mejor?
[Ver] [Votar]