[C#] Dudas construccion de clases

21/03/2007 - 22:55 por Paulino Padial | Informe spam
Hola lista, antes de nada saludar y dar las gracias :)

Os planteo mi duda, es con temas de herencia de clases en c#.

Mi sistema de clases, interpretara un "ES UN" del modelo E/R. Tengo una
clase "Persona" y una clase "Alumno" ( una persona es un alumno, es un
cliente, es un profesor... )

[Informacion adicional]
Estas clases "mapean" tablas de la base de datos y tendrán funciones de
cargar, actualizar, insertar, eliminar... de modo que podre usar
tranquilamente
Alumno a = new Alumno( 1 ); //me cargara el alumno con codigo 1 y me
rellenaria el objeto a con esos datos

a.Nombre = "Otro Nombre";
a.Update() -> me actualiza los datos en la base de datos
a.LimpiarObjeto() -> resetea el objeto
[/Informacion adicional]

class Persona{

//miembros privados
private int _codigo;
private string _nombre;

Persona()//Constructor por defecto
{
_codigo = -1;
_nombre = "";
}
Persona( Persona p ){} //constructor de copias

//metodos de la clase
//Este metodo "limpia -> pone los valores por defecto a los miembros
como si se acabase de crear el objeto"

public void LimpiarObjeto(){
_codigo = -1;
_nombre = "";
}
}

//ahora tengo mi clase alumno que hereda de persona
class Alumno : Persona {
private int _nota;
Alumno() : base() /* Esto llama al constructor de la clase padre y
inicializa los valores de la clase padre a valores por defecto*/
{
_nota = -1;
}

}

[Planteamiento de las dudas]
Aqui van mis dudas:

1.- Deseo crear en la clase Hija ( Alumno ) una funcion que se llame
igual que la de la clase padre -> LimpiarObjeto() que lo que hara sera
lo mismo que la del padre pero con los datos del objeto alumno. El caso
esque cuando la creo me dice que ya existe, y yo quiero ponerle EL MISMO
NOMBRE.

2.- Me gustaria saber si puedo hacer la funcion como hago el constructor
de la clase hija , usando base, para no tener que incluir en el codigo
de la funcion de alumno lo siguiente

public void LimpiarObjeto(){
base.LimpiarObjeto()
}

Me gustaria algo parecido a esto
public void LimpiarObjeto() : base() {} para evitarme poner eso de
base.LimpiarObjeto()

[/Planteamiento de las dudas]


Muchas gracias de antemano.

Preguntas similare

Leer las respuestas

#1 Octavio Hernandez
22/03/2007 - 00:52 | Informe spam
Paulino,

1. Lo q debes haber recibido es una advertencia (no un error), diciéndote
que uses la palabra clave
new para indicar q realmente deseas ocultar el método de la clase base
definiendo otro del mismo
nombre:

public new void LimpiarObjeto()
{
base.LimpiarObjeto();
}

2. La sintaxis ": base()" solo vale para los constructores, aquí tendrás que
hacer explícita la llamada.

Slds - Octavio



"Paulino Padial" escribió en el mensaje
news:
Hola lista, antes de nada saludar y dar las gracias :)

Os planteo mi duda, es con temas de herencia de clases en c#.

Mi sistema de clases, interpretara un "ES UN" del modelo E/R. Tengo una
clase "Persona" y una clase "Alumno" ( una persona es un alumno, es un
cliente, es un profesor... )

[Informacion adicional]
Estas clases "mapean" tablas de la base de datos y tendrán funciones de
cargar, actualizar, insertar, eliminar... de modo que podre usar
tranquilamente
Alumno a = new Alumno( 1 ); //me cargara el alumno con codigo 1 y me
rellenaria el objeto a con esos datos

a.Nombre = "Otro Nombre";
a.Update() -> me actualiza los datos en la base de datos
a.LimpiarObjeto() -> resetea el objeto
[/Informacion adicional]

class Persona{

//miembros privados
private int _codigo;
private string _nombre;

Persona()//Constructor por defecto
{
_codigo = -1;
_nombre = "";
}
Persona( Persona p ){} //constructor de copias

//metodos de la clase
//Este metodo "limpia -> pone los valores por defecto a los miembros como
si se acabase de crear el objeto"

public void LimpiarObjeto(){
_codigo = -1;
_nombre = "";
}
}

//ahora tengo mi clase alumno que hereda de persona
class Alumno : Persona {
private int _nota;
Alumno() : base() /* Esto llama al constructor de la clase padre y
inicializa los valores de la clase padre a valores por defecto*/
{ _nota = -1;
}

}

[Planteamiento de las dudas]
Aqui van mis dudas:

1.- Deseo crear en la clase Hija ( Alumno ) una funcion que se llame igual
que la de la clase padre -> LimpiarObjeto() que lo que hara sera lo mismo
que la del padre pero con los datos del objeto alumno. El caso esque
cuando la creo me dice que ya existe, y yo quiero ponerle EL MISMO NOMBRE.

2.- Me gustaria saber si puedo hacer la funcion como hago el constructor
de la clase hija , usando base, para no tener que incluir en el codigo de
la funcion de alumno lo siguiente

public void LimpiarObjeto(){
base.LimpiarObjeto()
}

Me gustaria algo parecido a esto
public void LimpiarObjeto() : base() {} para evitarme poner eso de
base.LimpiarObjeto()

[/Planteamiento de las dudas]


Muchas gracias de antemano.
Respuesta Responder a este mensaje
#2 Paulino Padial
22/03/2007 - 01:45 | Informe spam
Efectivamente Octavio, me da un warning, con el new, "se quita".
Y es verdad, he sacado polvo a mi MOC 2124C " Programming with C# " de
cuando hace años obtuve el MCSD y ahí viene bien explicado todo. Ha sido
fallo mio, porque al saber "como llamar" lo que queria hacer, no daba
con las busquedas en google, y recordaba que los libros MOC eran peores
de lo que son.

¡ Que Verguenza ! :-(

Muchas gracias por tu respuesta !

Octavio Hernandez escribió:
Paulino,

1. Lo q debes haber recibido es una advertencia (no un error), diciéndote
que uses la palabra clave
new para indicar q realmente deseas ocultar el método de la clase base
definiendo otro del mismo
nombre:

public new void LimpiarObjeto()
{
base.LimpiarObjeto();
}

2. La sintaxis ": base()" solo vale para los constructores, aquí tendrás que
hacer explícita la llamada.

Slds - Octavio



"Paulino Padial" escribió en el mensaje
news:
Hola lista, antes de nada saludar y dar las gracias :)

Os planteo mi duda, es con temas de herencia de clases en c#.

Mi sistema de clases, interpretara un "ES UN" del modelo E/R. Tengo una
clase "Persona" y una clase "Alumno" ( una persona es un alumno, es un
cliente, es un profesor... )

[Informacion adicional]
Estas clases "mapean" tablas de la base de datos y tendrán funciones de
cargar, actualizar, insertar, eliminar... de modo que podre usar
tranquilamente
Alumno a = new Alumno( 1 ); //me cargara el alumno con codigo 1 y me
rellenaria el objeto a con esos datos

a.Nombre = "Otro Nombre";
a.Update() -> me actualiza los datos en la base de datos
a.LimpiarObjeto() -> resetea el objeto
[/Informacion adicional]

class Persona{

//miembros privados
private int _codigo;
private string _nombre;

Persona()//Constructor por defecto
{
_codigo = -1;
_nombre = "";
}
Persona( Persona p ){} //constructor de copias

//metodos de la clase
//Este metodo "limpia -> pone los valores por defecto a los miembros como
si se acabase de crear el objeto"

public void LimpiarObjeto(){
_codigo = -1;
_nombre = "";
}
}

//ahora tengo mi clase alumno que hereda de persona
class Alumno : Persona {
private int _nota;
Alumno() : base() /* Esto llama al constructor de la clase padre y
inicializa los valores de la clase padre a valores por defecto*/
{ _nota = -1;
}

}

[Planteamiento de las dudas]
Aqui van mis dudas:

1.- Deseo crear en la clase Hija ( Alumno ) una funcion que se llame igual
que la de la clase padre -> LimpiarObjeto() que lo que hara sera lo mismo
que la del padre pero con los datos del objeto alumno. El caso esque
cuando la creo me dice que ya existe, y yo quiero ponerle EL MISMO NOMBRE.

2.- Me gustaria saber si puedo hacer la funcion como hago el constructor
de la clase hija , usando base, para no tener que incluir en el codigo de
la funcion de alumno lo siguiente

public void LimpiarObjeto(){
base.LimpiarObjeto()
}

Me gustaria algo parecido a esto
public void LimpiarObjeto() : base() {} para evitarme poner eso de
base.LimpiarObjeto()

[/Planteamiento de las dudas]


Muchas gracias de antemano.




Respuesta Responder a este mensaje
#3 Octavio Hernandez
22/03/2007 - 10:07 | Informe spam
Paulino,

Pero ojo, se me pasó comentarte antes, probablemente lo preferible sería
marcar
como "virtual" la versión de la clase base y "override" la de la clase
derivada, para
entonces poder utilizar el polimorfismo sobre esa jerarquía de clases...
Creo q ese
es el verdadero sentido de la advertencia.

Slds - Octavio



"Paulino Padial" escribió en el mensaje
news:%
Efectivamente Octavio, me da un warning, con el new, "se quita".
Y es verdad, he sacado polvo a mi MOC 2124C " Programming with C# " de
cuando hace años obtuve el MCSD y ahí viene bien explicado todo. Ha sido
fallo mio, porque al saber "como llamar" lo que queria hacer, no daba con
las busquedas en google, y recordaba que los libros MOC eran peores de lo
que son.

¡ Que Verguenza ! :-(

Muchas gracias por tu respuesta !

Octavio Hernandez escribió:
Paulino,

1. Lo q debes haber recibido es una advertencia (no un error), diciéndote
que uses la palabra clave
new para indicar q realmente deseas ocultar el método de la clase base
definiendo otro del mismo
nombre:

public new void LimpiarObjeto()
{
base.LimpiarObjeto();
}

2. La sintaxis ": base()" solo vale para los constructores, aquí tendrás
que hacer explícita la llamada.

Slds - Octavio



"Paulino Padial" escribió en el mensaje
news:
Hola lista, antes de nada saludar y dar las gracias :)

Os planteo mi duda, es con temas de herencia de clases en c#.

Mi sistema de clases, interpretara un "ES UN" del modelo E/R. Tengo una
clase "Persona" y una clase "Alumno" ( una persona es un alumno, es un
cliente, es un profesor... )

[Informacion adicional]
Estas clases "mapean" tablas de la base de datos y tendrán funciones de
cargar, actualizar, insertar, eliminar... de modo que podre usar
tranquilamente
Alumno a = new Alumno( 1 ); //me cargara el alumno con codigo 1 y me
rellenaria el objeto a con esos datos

a.Nombre = "Otro Nombre";
a.Update() -> me actualiza los datos en la base de datos
a.LimpiarObjeto() -> resetea el objeto
[/Informacion adicional]

class Persona{

//miembros privados
private int _codigo;
private string _nombre;

Persona()//Constructor por defecto
{
_codigo = -1;
_nombre = "";
}
Persona( Persona p ){} //constructor de copias

//metodos de la clase
//Este metodo "limpia -> pone los valores por defecto a los miembros
como si se acabase de crear el objeto"

public void LimpiarObjeto(){
_codigo = -1;
_nombre = "";
}
}

//ahora tengo mi clase alumno que hereda de persona
class Alumno : Persona {
private int _nota;
Alumno() : base() /* Esto llama al constructor de la clase padre y
inicializa los valores de la clase padre a valores por defecto*/
{ _nota = -1;
}

}

[Planteamiento de las dudas]
Aqui van mis dudas:

1.- Deseo crear en la clase Hija ( Alumno ) una funcion que se llame
igual que la de la clase padre -> LimpiarObjeto() que lo que hara sera
lo mismo que la del padre pero con los datos del objeto alumno. El caso
esque cuando la creo me dice que ya existe, y yo quiero ponerle EL MISMO
NOMBRE.

2.- Me gustaria saber si puedo hacer la funcion como hago el constructor
de la clase hija , usando base, para no tener que incluir en el codigo
de la funcion de alumno lo siguiente

public void LimpiarObjeto(){
base.LimpiarObjeto()
}

Me gustaria algo parecido a esto
public void LimpiarObjeto() : base() {} para evitarme poner eso de
base.LimpiarObjeto()

[/Planteamiento de las dudas]


Muchas gracias de antemano.



Respuesta Responder a este mensaje
#4 Paulino Padial
22/03/2007 - 11:25 | Informe spam
Pues si, seria lo mas adecuado, ademas supongo que así puedo crear una
interfaz para que el que desee crear clases que hereden tenga que
implementar el metodo :)

Muchas Gracias Nuevamente

Saludos Cordiales

Paulino Padial

Octavio Hernandez escribió:
Paulino,

Pero ojo, se me pasó comentarte antes, probablemente lo preferible sería
marcar
como "virtual" la versión de la clase base y "override" la de la clase
derivada, para
entonces poder utilizar el polimorfismo sobre esa jerarquía de clases...
Creo q ese
es el verdadero sentido de la advertencia.

Slds - Octavio



"Paulino Padial" escribió en el mensaje
news:%
Efectivamente Octavio, me da un warning, con el new, "se quita".
Y es verdad, he sacado polvo a mi MOC 2124C " Programming with C# " de
cuando hace años obtuve el MCSD y ahí viene bien explicado todo. Ha sido
fallo mio, porque al saber "como llamar" lo que queria hacer, no daba con
las busquedas en google, y recordaba que los libros MOC eran peores de lo
que son.

¡ Que Verguenza ! :-(

Muchas gracias por tu respuesta !

Octavio Hernandez escribió:
Paulino,

1. Lo q debes haber recibido es una advertencia (no un error), diciéndote
que uses la palabra clave
new para indicar q realmente deseas ocultar el método de la clase base
definiendo otro del mismo
nombre:

public new void LimpiarObjeto()
{
base.LimpiarObjeto();
}

2. La sintaxis ": base()" solo vale para los constructores, aquí tendrás
que hacer explícita la llamada.

Slds - Octavio



"Paulino Padial" escribió en el mensaje
news:
Hola lista, antes de nada saludar y dar las gracias :)

Os planteo mi duda, es con temas de herencia de clases en c#.

Mi sistema de clases, interpretara un "ES UN" del modelo E/R. Tengo una
clase "Persona" y una clase "Alumno" ( una persona es un alumno, es un
cliente, es un profesor... )

[Informacion adicional]
Estas clases "mapean" tablas de la base de datos y tendrán funciones de
cargar, actualizar, insertar, eliminar... de modo que podre usar
tranquilamente
Alumno a = new Alumno( 1 ); //me cargara el alumno con codigo 1 y me
rellenaria el objeto a con esos datos

a.Nombre = "Otro Nombre";
a.Update() -> me actualiza los datos en la base de datos
a.LimpiarObjeto() -> resetea el objeto
[/Informacion adicional]

class Persona{

//miembros privados
private int _codigo;
private string _nombre;

Persona()//Constructor por defecto
{
_codigo = -1;
_nombre = "";
}
Persona( Persona p ){} //constructor de copias

//metodos de la clase
//Este metodo "limpia -> pone los valores por defecto a los miembros
como si se acabase de crear el objeto"

public void LimpiarObjeto(){
_codigo = -1;
_nombre = "";
}
}

//ahora tengo mi clase alumno que hereda de persona
class Alumno : Persona {
private int _nota;
Alumno() : base() /* Esto llama al constructor de la clase padre y
inicializa los valores de la clase padre a valores por defecto*/
{ _nota = -1;
}

}

[Planteamiento de las dudas]
Aqui van mis dudas:

1.- Deseo crear en la clase Hija ( Alumno ) una funcion que se llame
igual que la de la clase padre -> LimpiarObjeto() que lo que hara sera
lo mismo que la del padre pero con los datos del objeto alumno. El caso
esque cuando la creo me dice que ya existe, y yo quiero ponerle EL MISMO
NOMBRE.

2.- Me gustaria saber si puedo hacer la funcion como hago el constructor
de la clase hija , usando base, para no tener que incluir en el codigo
de la funcion de alumno lo siguiente

public void LimpiarObjeto(){
base.LimpiarObjeto()
}

Me gustaria algo parecido a esto
public void LimpiarObjeto() : base() {} para evitarme poner eso de
base.LimpiarObjeto()

[/Planteamiento de las dudas]


Muchas gracias de antemano.







email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida