2009-04-22 9 views
3

Ich habe diese Klasse:C#: Wo sollten Sie Event-Handler-Delegierte platzieren?

public class GenericEventArgs<T> : EventArgs 
{ 
    public GenericEventArgs() : this(default(T)) {} 
    public GenericEventArgs(T value) { Value = value; } 
    public T Value { get; private set; } 
} 

Und diese Ereignishandler Delegat für sie:

public delegate void GenericEventHandler<T>(object sender, GenericEventArgs<T> e); 

Ich habe diese zur Zeit in der gleichen Datei zusammen in einem Namespace. Wird das als schlecht/chaotisch/etc. Im Allgemeinen würde ich sagen, dass jede Datei nur eine Klasse enthalten sollte. Um es sauber zu haben, würde ich lieber die GenericEventArgs Klasse in der Datei haben. Aber dann habe ich diesen GenericEventHandler<T> Delegierten, dass ich nicht sicher bin, wo ich hinlegen sollte. Sollte es eine eigene Datei haben? Mit nur ... dieser Linie? (und der Namensraum natürlich)

Wie machst du das normalerweise?

Antwort

9

Gibt es irgendeinen Grund dafür, EventHandler<TEventArgs> nicht zu verwenden? Ich dachte, es war ein äquivalentes EventArgs<T> aber ich kann es im Moment nicht sehen ... Wie auch immer, ich GenericEventArgs in GenericEventArgs.cs

setzen würde persönlich, wenn ich meine eigenen Delegattypen einführen wollen (was immer seltener, um ehrlich zu sein) Ich erstelle eine Delegates.cs Datei mit allen passenden Delegaten für den Namespace in. Dann weiß ich wo ich sie finden kann, ohne eine Datei für eine einzelne Deklaration zu haben.

+0

pragmatische Beratung – Gishu

+0

Weil der Designer Ereignisse des Typs EventHandler > nicht gut zu behandeln scheint. Vielleicht ist das ein Fehler, der gemeldet werden sollte ... (http://stackoverflow.com/questions/772036/c-event-not-showing-up-in-the-property-grid) – Svish

+0

Erstellen Sie keine Delegaten. cs. Dies ist eine Verbindung zwischen Code, den Sie nicht benötigen. –

1

Nun würde ich die GenericEventArgs<T> Klasse in einem eigenen Datei

GenericEventArgs_T.cs im gleichen Namensraum wie alles andere genannt setzen.

Und ich würde Ihren Delegierten (und Event, wenn es einen gibt) in der Klasse, die dieses Ereignis ausgesetzt sein wird setzen.

2

Wenn ich meine eigenen Eventhandler-Delegaten erstellen wollte, habe ich eine Datei mit dem Namen der EventArgs-Klasse erstellt, die ich in meinem eigenen Eventhandler-Delegaten verwendet habe. Zum Beispiel 'MyEventArgs.cs'.

Diese Datei enthielt die MyEventArgs-Klasse und den MyEventHandler-Delegaten, der diese Klasse verwendet hat.

Jetzt verwende ich jedoch den vorhandenen generischen EventHandler (EventHandler<T>), und ich muss nur meine benutzerdefinierte EventArgs-Klasse erstellen. Also, dieses 'Problem' existiert nicht mehr für mich. :)

-1

Ich würde tun, was Sie bereits tun, und dann alle Delegaten, die nicht für Ereignisse in einer separaten CS-Datei namens Delegates.cs oder etwas ähnliches verwendet werden.