Il y a beaucoup de discussions sur la question de savoir s'il faut fortement taper les arguments d'événement. Cette question ne concerne pas cela. J'ai la classe suivante (seul le code pertinent est inclus):
public abstract class Thread:
System.IDisposable
where TSender: Thread, new()
where TEventArgs: System.EventArgs, new()
{
public delegate void ThreadEventHandler (Thread sender, ThreadEventArgs e);
// This declaratino generates a VS 2012 warning.
public delegate void ThreadProcessIterationEventHandler (TSender sender, TEventArgs e);
}
La déclaration du deuxième délégué génère des avertissements VS2012 :
1. Le paramètre de type 'TSender' a le même nom que le paramètre de type du type extérieur 'Thread'
2. Le paramètre de type 'TEventArgs' a le même nom que le paramètre de type du type extérieur 'Thread'
Cette structure semble logiquement correcte puisque l'intention est de fournir un mécanisme d'exécution de threads encapsulé pour les classes dérivées. C'est certainement du code légal et il se compile et s'exécute comme prévu.
J'aurais pensé que avoir une contrainte de pointage vers soi-même pourrait être considéré comme une mauvaise pratique, mais pourquoi TSender
et TEventArgs
sont-ils signalés comme avertissements? N'est-ce pas la même chose que de déclarer NestedClass
?
Devrais-je être à l'affût de quelque chose?
MISE À JOUR : Le but du deuxième délégué est de permettre aux classes enfants de déclencher des événements fortement typés.