2012-03-27 5 views
0

Ich bin gerade dabei, FxCop über unsere Anwendung zu laufen, die bereits seit etwa einem Jahr entwickelt wird.Microsoft folgt nicht UseGenericEventHandlersInstances FxCop-Regel

Eine Regel, die ich unsicher bin, ist UseGenericEventHandlersInstances. Ich verstehe, wie man es implementiert, aber sehe nicht wirklich den Vorteil, abgesehen von dem Speichern des Schritts, einen Delegaten für jeden benutzerdefinierten Ereignishandler zu definieren. In unserem Fall haben wir diese Delegierten bereits erstellt und ich frage mich, ob wir irgendwelche Vorteile haben, unsere Event-Handler zu ändern oder diese Regel einfach zu deaktivieren.

In meiner begrenzten Erfahrung scheinen fast alle FxCop-Regeln eingehalten zu werden, um Microsoft und das .NET-Framework zu sein. In diesem Fall stimmt das jedoch nicht. Das .NET-Framework verwendet den traditionellen Ansatz, den wir verwendet haben, mit Delegaten zu deklarieren, zumindest für alle Maus- und Keybaord-Event-Handler, die ich untersucht habe.

Niemand weiß, warum Microsoft etwas tut oder tut, aber das lässt mich die Gültigkeit und den Nutzen dieser Regel in Frage stellen.

Antwort

1

Die meisten nicht generischen Delegaten, die in den aktuellen Versionen von .NET BCL angezeigt werden, wurden vor der Einführung von Generics erstellt. Das Ändern der bereits vorhandenen Ereignisse für die Verwendung von EventHandler wäre eine bahnbrechende Änderung, ebenso wie das Entfernen der öffentlichen __EventHandler-Delegaten, die möglicherweise von anderem Code verwendet werden. Es gibt jedoch einiges von EventHandler, das für neue Ereignisse verwendet wird, die von der BCL bereitgestellt werden, daher wäre es falsch anzunehmen, dass Microsoft sich nicht an die Regel für neuen Code hält.

Wenn in Ihrem Fall die Änderung älterer Ereignisdeklarationen eine brechende Änderung wäre oder einen niedrigen Wert haben würde, könnten Sie bestehende Verletzungen der Regel unterdrücken. Natürlich können Sie die Regel auch für neue Ereignisse ignorieren, obwohl ich mir nicht sicher bin, warum Sie dies tun sollten, da das Folgen der Regel unnötige Arbeit für den ursprünglichen Entwickler vermeidet und gleichzeitig die API-Nutzbarkeit verbessert.

+0

Abgesehen davon, dass Sie keinen Delegierten definieren müssen, was sind die wirklichen Einsparungen? Sie binden das Ereignis weiterhin an eine bestimmte benutzerdefinierte EventArgs-Klasse, sodass die Nutzbarkeitsgewinne nicht angezeigt werden. – WPFNewbie

+0

Haben Sie ein Beispielereignis, bei dem Microsoft die neue generische Methode verwendet? Ich konnte keine sehen. – WPFNewbie

+0

Das Definieren eines Delegates weniger ist für den Autor ein bisschen Gewinn. Nicht nachsehen zu müssen, was YetAnotherEventHandler darstellt, ist ein Gewinn (wohl ein größerer) für den Verbraucher. Als Beispiele für EventHandler Verwendung in der BCL gibt es viele. Die erste öffentliche, die ich in mscorlib gefunden habe, ist System.AppDomain.FirstChanceException. –