C sharp - Problema con herencia en c#

 
Vista:
sin imagen de perfil

Problema con herencia en c#

Publicado por Andres (2 intervenciones) el 30/04/2017 03:42:41
Tengo la siguiente consigna: Hace una Vista programador (nombre, apellido, horas trabajadas, boton calcular()) El metodo calcular devuelve el resultado en una vista 2 de programador(nombre, apellido - solo lectura). (Valor hora e incentivo en la clase como atributo privado - para calcular sueldo: valorHora*horasTrabajadas+incentivo). Tengo que hacer una herencia entre Empleado y EmpleadoProgramador.

empleado.cs

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
 
namespace Empresa.Models
{
    public abstract class Empleado
    {
        protected string Nombre { set; get; }
        protected string Apellido { set; get; }
        public Empleado() { }
 
        public Empleado(string Nombre, string Apellido)
        {
            Nombre = this.Nombre;
            Apellido = this.Apellido;
        }
 
        /*  public abstract float CalcularSueldo();
          } */
 
    }
}

EmpleadoProgramador.cs

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
 
namespace Empresa.Models
{
    public class EmpleadoProgramador : Empleado
    {
        private float SueldoFijo { set; get; }
 
       // public EmpleadoProgramador() { }
 
        private void EmpleadoProgramador(string Nombre, string Apellido, int horas,float valorHora, float incentivo) : base(Nombre, Apellido)
        {
            horas = 30;
            valorHora = 50;
            incentivo = 5000;
            CalcularSueldo(Nombre, Apellido, horas, valorHora, incentivo);
        }
 
 
 
 
        public float CalcularSueldo(horas, valorHora, incentivo)
        {
 
            float SueldoFijo = valorHora * horas + incentivo;
            return SueldoFijo;
        }
    }
}

En
1
private void EmpleadoProgramador(string Nombre, string Apellido, int horas,float valorHora, float incentivo) : base(Nombre, Apellido)
me dice que "los nombres de los miembros no pueden coincidir con los tipos envolventes" y no me acepta el : para la herencia, tampoco me acepta el método CalcularSueldo() porque dice que no hay sobrecarga. Tambien en

1
2
3
4
5
6
public float CalcularSueldo(horas, valorHora, incentivo)
{
 
   float SueldoFijo = valorHora * horas + incentivo;
    return SueldoFijo;
}
me dice que no existen esos tipos. Qué estoy haciendo mal?
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Óscar

Problema con herencia en c#

Publicado por Óscar (6 intervenciones) el 04/05/2017 16:43:54
Vaya lío Andrés, jejejeje.

Prueba esto. Si no entiendes algo, me lo dices.

Ten en cuenta que cuando una clase hereda de otra, contiene los campos y métodos de la clase base.
Como en empleado has declarado un método 'abstract' con una firma determinada (los argumentos, en el caso tuyo no tiene), cuando reescribes el método en la clase heredada, debe mantener la firma, es decir, los mismos argumentos. Sin embargo, lo que hagas dentro del método es cosa de cada clase hija. Conviene añadir la palabra reservada 'override'.

Un saludo, Óscar

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
namespace _1601297
{
    class Program
    {
        static void Main(string[] args)
        {
        }
 
        public abstract class Empleado
        {
            protected string Nombre { set; get; }
            protected string Apellido { set; get; }
            public Empleado() { }
 
            public Empleado(string Nombre, string Apellido)
            {
                Nombre = this.Nombre;
                Apellido = this.Apellido;
            }
 
            public abstract float CalcularSueldo();
        }
 
 
        public class EmpleadoProgramador : Empleado
        {
            private int horas;
            private float valorHora;
            private float incentivo;
 
            private float SueldoFijo { set; get; }
 
            // public EmpleadoProgramador() { }
 
            private EmpleadoProgramador(string Nombre, string Apellido, int horas, float valorHora, float incentivo) : base(Nombre, Apellido)
            {
                this.horas = horas;
                this.valorHora = valorHora;
                this.incentivo = incentivo;
                this.Nombre = Nombre;
                this.Apellido = Apellido;
            }
 
            override
            public float CalcularSueldo()
            {
                return this.valorHora * horas + incentivo;
            }
        }
    }
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Problema con herencia en c#

Publicado por Andres (2 intervenciones) el 11/05/2017 23:34:00
Lo que me pasaste no funciona, me tira varios errores:
Gravedad Código Descripción Proyecto Archivo Línea Estado de supresión
Error CS0534 'EmpleadoProgramador' no implementa el miembro abstracto heredado 'Empleado.CalcularSueldo()' Empresa2 C:\Prog web 3 2017\Projects2\Empresa3\Empresa2\Models\EmpleadoProgramador.cs 8 Activa

Gravedad Código Descripción Proyecto Archivo Línea Estado de supresión
Error CS0115 'EmpleadoProgramador.CalcularSueldo(int, float, float)': no se encontró ningún miembro adecuado para invalidar Empresa2 C:\Prog web 3 2017\Projects2\Empresa3\Empresa2\Models\EmpleadoProgramador.cs 46 Activa

Como hago para ponerle valores por defecto a las variables valorHora e incentivo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar