 |
|
 |
Definición de clases
Conceptos de clase y objeto
C# es un lenguaje orientado a objetos puro[6], lo que significa que todo con lo que vamos a trabajar en este lenguaje son objetos. Un objeto es un agregado de datos y de métodos que permiten manipular dichos datos, y un programa en C# no es más que un conjunto de objetos que interaccionan unos con otros a través de sus métodos.
Una clase es la definición de las características concretas de un determinado tipo de objetos. Es decir, de cuáles son los datos y los métodos de los que van a disponer todos los objetos de ese tipo. Por esta razón, se suele decir que el tipo de dato de un objeto es la clase que define las características del mismo[7].
Sintaxis de definición de clases
La sintaxis básica para definir una clase es la que a continuación se muestra:
class <nombreClase> { <miembros> }
|
De este modo se definiría una clase de nombre cuyos miembros son los definidos en . Los miembros de una clase son los datos y métodos de los que van a disponer todos los objetos de la misma. Un ejemplo de cómo declarar una clase de nombre A que no tenga ningún miembro es la siguiente:
Una clase así declarada no dispondrá de ningún miembro a excepción de los implícitamente definidos de manera común para todos los objetos que creemos en C#. Estos miembros los veremos dentro de poco en este mismo tema bajo el epígrafe La clase primegina: System.Object.
Aunque en C# hay muchos tipos de miembros distintos, por ahora vamos a considerar que éstos únicamente pueden ser campos o métodos y vamos a hablar un poco acerca de ellos y de cómo se definen:
- Campos: Un campo es un dato común a todos los objetos de una determinada clase. Para definir cuáles son los campos de los que una clase dispone se usa la siguiente sintaxis dentro de la zona señalada como <miembros> en la definición de la misma:
<tipoCampo> <nombreCampo>;
|
El nombre que demos al campo puede ser cualquier identificador que queramos siempre y cuando siga las reglas descritas en el Tema 4: Aspectos Léxicos para la escritura de identificadores y no coincida con el nombre de ningún otro miembro previamente definido en la definición de clase.
Los campos de un objeto son a su vez objetos, y en <tipoCampo> hemos de indicar cuál es el tipo de dato del objeto que vamos a crear. Éste tipo puede corresponderse con cualquiera que los predefinidos en la BCL o con cualquier otro que nosotros hallamos definido siguiendo la sintaxis arriba mostrada. A continuación se muestra un ejemplo de definición de una clase de nombre Persona que dispone de tres campos:
class Persona { string Nombre;// Campo de cada objeto Persona que almacena su nombre int Edad; // Campo de cada objeto Persona que almacena su edad string NIF; // Campo de cada objeto Persona que almacena su NIF }
|
Según esta definición, todos los objetos de clase Persona incorporarán campos que almacenarán cuál es el nombre de la persona que cada objeto representa, cuál es su edad y cuál es su NIF. El tipo int incluido en la definición del campo Edad es un tipo predefinido en la BCL cuyos objetos son capaces de almacenar números enteros con signo comprendidos entre -2.147.483.648 y 2.147.483.647 (32 bits), mientras que string es un tipo predefinido que permite almacenar cadenas de texto que sigan el formato de los literales de cadena visto en el Tema 4: Aspectos Léxicos
Para acceder a un campo de un determinado objeto se usa la sintaxis:
Por ejemplo, para acceder al campo Edad de un objeto Persona llamado p y cambiar su valor por 20 se haría:
En realidad lo marcado como <objeto> no tiene porqué ser necesariamente el nombre de algún objeto, sino que puede ser cualquier expresión que produzca como resultado una referencia no nula a un objeto (si produjese null se lanzaría una excepción del tipo predefinido System.NullPointerException)
- Metodos:Un método es un conjunto de instrucciones a las que se les asocia un nombre de modo que si se desea ejecutarlas basta referenciarlas a través de dicho nombre en vez de tener que escribirlas. Dentro de estas instrucciones es posible acceder con total libertad a la información almacenada en los campos pertenecientes a la clase dentro de la que el método se ha definido, por lo que como al principio del tema se indicó, los métodos permiten manipular los datos almacenados en los objetos.
La sintaxis que se usa en C# para definir los métodos es la siguiente:
<tipoDevuelto> <nombreMétodo> (<parametros>) { <instrucciones> }
|
Todo método puede devolver un objeto como resultado de la ejecución de las instrucciones que lo forman, y el tipo de dato al que pertenece este objeto es lo que se indica en <tipoDevuelto>. Si no devuelve nada se indica void, y si devuelve algo es obligatorio finalizar la ejecución de sus instrucciones con alguna instrucción return <objeto>; que indique qué objeto ha de devolverse.
Opcionalmente todo método puede recibir en cada llamada una lista de objetos a los que podrá acceder durante la ejecución de sus instrucciones. En <parametros> se indica es cuáles son los tipos de dato de estos objetos y cuál es el nombre con el que harán referencia las instrucciones del método a cada uno de ellos. Aunque los objetos que puede recibir el método pueden ser diferentes cada vez que se solicite su ejecución, siempre han de ser de los mismos tipos y han de seguir el orden establecido en <parametros>.
Un ejemplo de cómo declarar un método de nombre Cumpleaños es la siguiente modificación de la definición de la clase Persona usada antes como ejemplo:
class Persona { string Nombre;//Campo de cada objeto Persona que almacena su nombre int Edad; //Campo de cada objeto Persona que almacena su edad string NIF; //Campo de cada objeto Persona que almacena su NIF void Cumpleaños()//Incrementa en uno de la edad del objeto Persona { Edad++; } }
|
La sintaxis usada para llamar a los métodos de un objeto es la misma que la usada para llamar a sus campos, sólo que ahora tras el nombre del método al que se desea llamar hay que indicar entre paréntesis cuáles son los valores que se desea dar a los parámetros del método al hacer la llamada. O sea, se escribe:
<objeto>.<método>(<parámetros>)
|
Como es lógico, si el método no tomase parámetros se dejarían vacíos los parámetros en la llamada al mismo. Por ejemplo, para llamar al método Cumpleaños() de un objeto Persona llamado p se haría:
p.Cumpleaños(); // El método no toma parámetros, // luego no le pasamos ninguno
|
Es importante señalar que en una misma clase pueden definirse varios métodos con el mismo nombre siempre y cuando tomen diferente número o tipo de parámetros. A esto se le conoce como sobrecarga de métodos, y es posible ya que el compilador sabrá a cual llamar a partir de los <parámetros> especificados.
Sin embargo, lo que no se permite es definir varios métodos que únicamente se diferencien en su valor de retorno, ya que como éste no se tiene porqué indicar al llamarlos no podría diferenciarse a que método en concreto se hace referencia en cada llamada. Por ejemplo, a partir de la llamada:
Si además de la versión de Cumpleaños() que no retorna nada hubiese otra que retornase un int, ¿cómo sabría entonces el compilador a cuál llamar?
Antes de continuar es preciso señalar que en C# todo, incluido los literales, son objetos del tipo de cada literal y por tanto pueden contar con miembros a los que se accedería tal y como se ha explicado. Para entender esto no hay nada mejor que un ejemplo:
string s = 12.ToString();
|
Este código almacena el literal de cadena “12” en la variable s, pues 12 es un objeto de tipo int (tipo que representa enteros) y cuenta cuenta con el método común a todos los ints llamado ToString() que lo que hace es devolver una cadena cuyos caracteres son los dígitos que forman el entero representado por el int sobre el que se aplica; y como la variable s es de tipo string (tipo que representa cadenas) es perfectamente posible almacenar dicha cadena en ella, que es lo que se hace en el código anterior. |
| |
 |
verde
por
x
Respuesta recibida el [10/06/2007 12:07:27]
|
 |
mejoren su pagina por que esta bien aburrida
|
| |
 |
Respuesta al anterior
por
ElErmitaño
Respuesta recibida el [07/08/2007 04:01:38]
|
 |
Se supone que es 1 tutorial sobre C#, no una página de entretenimiento ^_^" jajaja
|
| |
 |
Frank Moya Pons
por
Anónimo
Respuesta recibida el [12/10/2007 08:44:51]
|
 |
Que es la Clase, su Clasificacion y su Valor
|
| |
 |
=P
por
Jealotus
Respuesta recibida el [08/11/2007 09:29:46]
|
 |
me parece buen tutorial... me ha explicado mejor la mayoria de las cosas que las que me ha explicado el maestro... faltan algunos ejemplos... o eso ayudaria mas a comprender otros casos...
|
| |
 |
xap
por
mari
Respuesta recibida el [29/01/2008 07:42:28]
|
 |
pues si me ayudo un poquito con unas dudas pero faltan mas ejemplos
|
| |
 |
me gustaría...
por
angel
Respuesta recibida el [09/03/2008 12:25:32]
|
 |
Hola, apenas empecé a leer éste manual y quisiera saber si me podrían mandar ejemplos de todos los temas que tienen y además quisiera saber si se puede descargar èste tutorial? sancermoa@gmail.com
|
| |
 |
Bueno
por
Fredy
Respuesta recibida el [03/04/2008 10:30:05]
|
 |
DEberias poenr ejemplos mas interesante y ams informacion, la verdad no parece un tutorial jeje
|
| |
 |
regular
por
yuli
Respuesta recibida el [15/04/2008 01:32:53]
|
 |
hola. poss me parecio un poco aburridon, se necesitan mas ejemplos, y mayor explikcion, ya saben q programacion no es nada facil, asi q pongas mas ejemplos, seee. bye?.
|
| |
 |
regular
por
yuli
Respuesta recibida el [15/04/2008 01:35:12]
|
 |
hola aki no mas pasando, por fa pon mas ejemplos q lo expliquen bien y q sea entendible mayormnt, estauvo aburrido, pero pueden mejorar. sale.aprovechando. visiten mi metro www.metroflog.com/yuli_89
|
| |
 |
No entiendo las quejas de la g...
por
Jon
Respuesta recibida el [04/05/2008 05:51:45]
|
 |
No entiendo las quejas de la gente sobre lo aburrido que resulta el tutorial. No es una novela ni una página de juegos, es un tutorial sobre un lenguaje de programación... la verdad es que con tal de quejarse la gente. En fin, que muchas gracias por colgar este manual.
|
| |
 |
comentario..
por
ALFREDYNHO
Respuesta recibida el [10/05/2008 11:47:47]
|
 |
Esta muy bueno pero podria ser excelente con algunos ejemplos mas ya que aprender a programar es programando y para eso se necesita ejemplitos ^_^ Yo no soy un experto pero ahi voy
|
| |
 |
kedo 1 duda
por
vicky
Respuesta recibida el [04/06/2008 08:58:35]
|
 |
no encontre la definicion de control
por todo lo demas esta muy bien el tutorial...
|
| |
 |
...
por
Stratega
Respuesta recibida el [10/06/2008 04:45:00]
|
 |
A este tutorial, se le deberían agregar más ejemplos !!! Favor de no confundir "Ejemplos" con "Entretención".
|
| |
 |
A caballo regalado ...
por
Bufalo_lp
Respuesta recibida el [13/07/2008 07:42:54]
|
 |
Quejarse menos, leer y practicar más. Chiquillos, comprender la sintaxis de un lenguaje es un cosa. Ahora, aprender algoritmo estructurado, algoritmo O.O. es otra historia, los ejemplos sirven pero no generan producción propia. Uno aprende de los errores y estos se dan con la practica.
|
| |
 |
Efectivamente hacen falta ejemplo
por
Algoeno
Respuesta recibida el [01/08/2008 03:58:03]
|
 |
Me parece un buen tutorial y estoy de acuerdo con lo que dice JON pues es un tutorial de programacion, y no una revista de chismes o algo asi, mejor hay que leer mas y dejar de quejarse. haaaa y la verdad si hacen falta mas ejemplos, digo para entender mejor puesto que en mi caso es mejor la practica que la teoria, si pudieran poner mas ejemplos estaria de lujo...
|
| |
 |
Excelente
por
Ocupado
Respuesta recibida el [21/08/2008 04:11:06]
|
 |
Me pareció muy claro y útil. Supongo que cuando piden ejemplos se referirán a algún código completo de algún juego divertido jaja A leer mas detenidamente y a quejarse menos :) Muchas gracias
|
| |
 |
muy buen tutorial
por
viktor
Respuesta recibida el [02/09/2008 05:50:09]
|
 |
me parece excelente muy bien explikado,,!
saludo0s
|
| |
 |
Clases
por
Israel
Respuesta recibida el [18/10/2008 10:21:07]
|
 |
Gracias por el tutorial, ahora, como podria ser una clase para manipular datos?
gracias por todo
|
| |
 |
Hola
por
Linda
Respuesta recibida el [10/11/2008 03:58:00]
|
 |
Me parece un buen manual, lo que importa es la intención en enseñarnos a programar, ah y lo de aburrido no tiene nada, solo que como alguien empieza a poner un comentario asi ya todos se siguen, y mejor que hagan las cosas solos, no quieren que aqui les hagan la tarea o si? Por mi parte buen manual, ojala sigan subiendo mas cosas
|
| |
 |
graxias
por
toño
Respuesta recibida el [16/11/2008 10:09:44]
|
 |
esta bien padre suy pag aunke me gustaria ke icieran un programa el cual nos mostrara el signo zodiakalde la persona al escribir su fecha
|
| Añadir comentario ... |
Para preguntar utiliza los foros
|
|

|
Definición de clases |
|
Autor:
José Antonio González Seco
|
|
Visitas:
27093 |
Fecha de publicación:
03/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:
305
|
Comentarios:
0
|
Archivo:
Articulos
|
Visitas:
137
|
Comentarios:
0
|
Archivo:
Articulos
|
Visitas:
101
|
Comentarios:
5
|
Archivo:
Articulos
|
Visitas:
430
|
Comentarios:
4
|
Archivo:
Articulos
|
Visitas:
1449
|
Comentarios:
6
|
Archivo:
Articulos
|
Visitas:
239
|
Comentarios:
0
|
Archivo:
Articulos
|
Visitas:
611
|
Comentarios:
0
|
Archivo:
Articulos
|
Visitas:
2578
|
Comentarios:
4
|
Archivo:
Articulos
|
Visitas:
464
|
Comentarios:
0
|
Archivo:
Articulos
|
Visitas:
1072
|
Comentarios:
0
|
Archivo:
Articulos
|
|
|
|
 |
| Encuesta |
|
¿A que perfil te adaptas mejor? |
|
|
|
|
|
|
|
|
 |