J'ai une classe appelée Employee. dans lequel il y a trois propriétés implémentées automatiquement et une fonction qui retourne les noms des employés qui gitent le salaire bonus, j'utilise des délégués donc il n'y a pas de logique dans cette fonction et c'est la raison pour laquelle cette classe et méthode sont réutilisables.Confusion dans la méthode anonyme
class Employee
{
public int Id { get; set; }
public string Name { get; set; }
public int Salary { get; set; }
public static void BonusForEmp(List<Employee> emp, Bonus Isavailable)
{
foreach (Employee e in emp)
{
if (Isavailable(e))
{
Console.WriteLine(e.Name + " got bonus");
}
}
}
}
delegate bool Bonus(Employee Employes); // Delegate
Ici, il est ma méthode principale dans laquelle je crée une liste des employés et de faire toutes les étapes comme la création d'une instance et en passant la méthode comme argument.
List<Employee> EmpList = new List<Employee>();
EmpList.Add(new Employee() { Id = 1, Name = "A", Salary = 12000});
EmpList.Add(new Employee() { Id = 2, Name = "B", Salary = 7999 });
EmpList.Add(new Employee() { Id = 3, Name = "C", Salary = 1999 });
EmpList.Add(new Employee() { Id = 4, Name = "D, Salary = 20000});
Bonus B = new Bonus(BonusAvailabeFor); //instance of dlegate and pasing method name as an argument
Employee.BonusForEmp(EmpList, B); //using
Console.ReadLine();
Alors vous tous penser que là où est ma méthode (BonusAvailableFor) dans lequel je l'ai fait tout le travail logique qui correspond à la signature du délégué? Ici, il est
public static bool BonusAvailabeFor(Employee eml) // the function with same signature of the delegate here we use our logic.
{
if (eml.Salary > 8000)
{
return true;
}
else
{
return false;
}
}
Donc, ce code fonctionne si parfaitement agréable et retourner les noms des employés dont le salaire> 8000. Je viens de lire la méthode anonyme quelque part qui est l'expression en ligne qui peut être utilisé chaque fois qu'un type délégué devrait .Ils nous fournissent un moyen de créer une instance de délégué sans avoir à écrire une méthode séparée .. la définition est belle, il va réduire mes lignes de code si je peux implémenter cela dans mon scénario, alors comment puis-je l'obtenir? < === (Ma question) Eh bien, je sais que je peux le faire avec l'expression Lambda ou FindAll() prédéfinir funtion en classe de collection de la liste, mais je suis ici pour le faire avec méthode anonyme ..
Je ne comprends pas pourquoi vous n'utilisez pas simplement la méthode Any (e => e.Salary> 8000). Je comprends que vous ne voulez pas utiliser lambda, mais pourquoi pas? – Zorkind
C# 2.0 ne supporte pas Linq ou les types anonymes, vouliez-vous vraiment étiqueter la question avec ça? – stuartd
@stuartd en êtes-vous sûr? Dans ma connaissance Anonyme méthode ont été introduites dans C# 2 –