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/override
modificateurs 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.