• Domingo 22 de Diciembre de 2024, 10:11

Autor Tema:  atributos marcados private en inherencia (soy nuevo)  (Leído 795 veces)

angel21os

  • Nuevo Miembro
  • *
  • Mensajes: 1
    • Ver Perfil
atributos marcados private en inherencia (soy nuevo)
« en: Lunes 25 de Mayo de 2009, 02:56 »
0
hola a todos, estoy aprendiendo c# y la verdad me enrede un poco con este tema, en principio lo vi sencillo, si al atributo se le coloca private no puede ser utilizado fuera de la clase, el public si en todas y el protected en las heredadas, al comienzo creia que si colocaba un atributo private es como si las clases hijas no heredaran ese atributo, no obstante en algunos libros indican que si heredan estos campos y que estos tambien son privates, asi que decidi probar haciendo un programita cutre, el constructor de la clase 2 llama al constructor de la clase 1 para saber que hacer con el nombre y la edad, atributos que solo estan declarados en la primera clase, no da error de compilacion por lo que supongo que en realidad hereda esos atributos, es decir, que la clase 2 va a tener un private string nombre y uno de edad.

no obstante si defino un metodo en la clase 2, se supondria que podria utilizar los atributos privados que declare en esa clase (y quizas los heredados ) no obstante en mostrardatos() no puedo utilizar ni nombre ni edad (a donde $%& se fueron los valores que coloque al usar el constructor) , mi pregunta mas especifica es por que puedo usar un constructor que se refiere a otro constructor base, cuando este tiene atributos que no tiene mi clase heredad, ya se, me van a decir que utilize public o protected, pero la verdad es que quiero entender como funciona esto y a donde van mis datos, "martina, 99".......

a la final modifique el programa un poco y quedo mas confuso, funciona como esperaba pero el this del metodo de la clase1 invoca los atributos de un objeto que en teoria deberia estar en la clase 2 (a martina)....el nombre martina se guarda en la clase 1 o la clase 2??...

gracias a todos






namespace ConsoleApplication1 {
class clase_1 {
private string nombre;
private int edad;

public clase_1(string nombre, int edad) {
this.nombre=nombre;
this.edad=edad;
}


public void mostrardatos(){
Console.WriteLine(this.nombre, this.edad);
}

}

class clase_2: clase_1 {
private string sexo;

public clase_2(string nombre, int edad, string sexo)
: base (nombre, edad) {
this.sexo=sexo;
}


public void mostrardatos2() {
base.mostrardatos ();
Console.WriteLine (this.sexo);

}
}


class Program {
static void Main(string[] args) {

clase_1 objeto1=new clase_1 ("pedro", 21);
clase_2 objeto2=new clase_2 ("martina", 99, "m");
objeto1.mostrardatos ();
Console.ReadLine ();
objeto2.mostrardatos2 ();
Console.ReadLine ();

}
}
}