none
Saber de que clase se ejecuta método RRS feed

  • Pregunta

  • Hola a todos,

    Tengo las siguientes clases:

        public class Carro
        {
            protected int Sumar(int numero1, int numero2)
            {
                return numero1 + numero2;
            }
        }

        class Audi : Carro
        {
            private void Sumar()
            {
                int x = base.Sumar(10, 7);
            }
        }

        class Toyota : Carro
        {
            private void Sumar()
            {
                int x = base.Sumar(10, 7);
            }
        }

    Como ven, las clases Audi y Toyota heredan de la clase Carro que tiene un método que hace una suma...

    La pregunta es la siguiente, yo desde la clase Carro, puedo saber cuál de las dos clases es la que está invocando el método ?

    Gracias !


    Un saludo,
    Cristian Pérez
    Blog


    martes, 15 de octubre de 2013 17:24

Respuestas

  • Hola Cristian puedes hacer que tu método Sumar reciba un parametro que indique la clase:

    Protected int Sumar(int numq, int num2, string clase)
    {
    }

    Sin embargo pienso que así no aplicarías el concepto de herencia correctamente, no es lo ideal, lo ideal es que tu clase base Carro tenga un método Virtual, el cual desde las hijas se sobre escriba con override y cada una haga su implementación particular para cada clase.

    espero te sirva mi consejo, saludos!!


    El Tavo http://eltavodev.blogspot.com/

    • Marcado como respuesta Cristian Pérez martes, 15 de octubre de 2013 20:06
    martes, 15 de octubre de 2013 17:51
  • Si ambas clases, Toyota y Audi heredan de Carro, puedes declarar como virtual el método Sumar() de tu clase Carro y luego sobreescribir dicho método en cada una de las otras clases. Espero haberme hecho entender


    Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó vótala como útil. Saludos

    • Marcado como respuesta Cristian Pérez martes, 15 de octubre de 2013 20:07
    martes, 15 de octubre de 2013 17:57
    Moderador
  • poder diferenciar de qué clase es que se está invocando este evento

    pero ese dato como vas a informarlo ? o sea sera algo que el metodo devuelve

    quizas algun parametro del metodo que sea "ref" para que devuelva el valor

    como esta ahora el metodo esta cerrado, solo podrias loguear a un archivo o a la consola, pero no puedes devolver por donde va pasando

    saludos

    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    • Marcado como respuesta Cristian Pérez martes, 15 de octubre de 2013 20:07
    martes, 15 de octubre de 2013 18:02

Todas las respuestas

  • hola

    alli no veo que estes aplicando nada de herencia ya que no defines como virtual el metodo Sumar() de la clase base

    yo desde la clase Carro, puedo saber cuál de las dos clases es la que está invocando el método ?

    perodonde quieres que se informa este dato ? porque podrias hacer

    class Audi : Carro { private void Sumar() {

    Console.WriteLine("Audi::Sumar()"); int x = base.Sumar(10, 7); } }

    con eso informa por donde va pasando

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    martes, 15 de octubre de 2013 17:33
  • Hola Leandro,

    Gracias por responder...

    Lo que pasa es que eso es un mero ejemplo, lo que yo necesito es en la clase Carro, en el método Sumar(), poder diferenciar de qué clase es que se está invocando este evento, ya que necesito hacer ciertas operaciones especiales con una clase u otra...

    Espero haberme hecho entender.

    Gracias !


    Un saludo,
    Cristian Pérez
    Blog

    martes, 15 de octubre de 2013 17:37
  • Hola Cristian puedes hacer que tu método Sumar reciba un parametro que indique la clase:

    Protected int Sumar(int numq, int num2, string clase)
    {
    }

    Sin embargo pienso que así no aplicarías el concepto de herencia correctamente, no es lo ideal, lo ideal es que tu clase base Carro tenga un método Virtual, el cual desde las hijas se sobre escriba con override y cada una haga su implementación particular para cada clase.

    espero te sirva mi consejo, saludos!!


    El Tavo http://eltavodev.blogspot.com/

    • Marcado como respuesta Cristian Pérez martes, 15 de octubre de 2013 20:06
    martes, 15 de octubre de 2013 17:51
  • Si ambas clases, Toyota y Audi heredan de Carro, puedes declarar como virtual el método Sumar() de tu clase Carro y luego sobreescribir dicho método en cada una de las otras clases. Espero haberme hecho entender


    Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó vótala como útil. Saludos

    • Marcado como respuesta Cristian Pérez martes, 15 de octubre de 2013 20:07
    martes, 15 de octubre de 2013 17:57
    Moderador
  • poder diferenciar de qué clase es que se está invocando este evento

    pero ese dato como vas a informarlo ? o sea sera algo que el metodo devuelve

    quizas algun parametro del metodo que sea "ref" para que devuelva el valor

    como esta ahora el metodo esta cerrado, solo podrias loguear a un archivo o a la consola, pero no puedes devolver por donde va pasando

    saludos

    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    • Marcado como respuesta Cristian Pérez martes, 15 de octubre de 2013 20:07
    martes, 15 de octubre de 2013 18:02