Comment appeler un champ de classe enfant dans la méthode de classe parent en C #


Mangrio

Je veux imprimer le salaire de la classe enfant invoquée (l'une d'entre elles) dans la méthode héritée de Detail(). cela ne peut pas être fait dans ce scénario. Comment pourrais-je obtenir le salaire avec tous les autres détails d'un employé.

Voici le code

using System;

class Employee
{
    public int ID;
    public string Name;
    public string Gender;
    public string City;

    public void Detail()
    {
        Console.WriteLine("Name: {0} \nGender: {1} \nCity: {2} \nID: {3}", Name, Gender, City, ID); //I want to get Yearly or Hourly Salary with these all
    }
}

class PermanatEmp : Employee
{
    public float YearlySalary;

}

class TempEmp : Employee
{
    public float HourlySalary;
}



class Class4
{
    static void Main()
    {
        PermanatEmp pe = new PermanatEmp();
        pe.ID = 101;
        pe.Name = "XYZ";
        pe.Gender = "Male";
        pe.City = "London";
        pe.YearlySalary = 20000;
        pe.Detail(); // how to get Salary with these all 


    }

}
sstan

En utilisant également les virtual/overridemodificateurs de méthode, mais sans dupliquer le code dans les classes enfants. Adaptez-vous à vos besoins:

class Employee
{
    public int ID;
    public string Name;
    public string Gender;
    public string City;

    public virtual void Detail() // add virtual keyword here to allow overrides.
    {
        Console.WriteLine("Name: {0} \nGender: {1} \nCity: {2} \nID: {3}", Name, Gender, City, ID); //I want to get Yearly or Hourly Salary with these all
    }
}

class PermanatEmp : Employee
{
    public float YearlySalary;

    public override void Detail()
    {
        base.Detail(); // prints base class fields.
        Console.WriteLine("Yearly Salary: {0}", YearlySalary);
    }
}

class TempEmp : Employee
{
    public float HourlySalary;

    public override void Detail()
    {
        base.Detail(); // prints base class fields.
        Console.WriteLine("Hourly Salary: {0}", HourlySalary);
    }
}

Remarque: je suis d'accord avec Jon Skeet sur le fait que vous aurez une conception plus propre et plus flexible si vous remplacez la ToString()méthode à la place. Mais l'idée de base est similaire dans les deux cas.

Articles connexes