C #: Где вы должны разместить делегатов обработчиков событий? - PullRequest
3 голосов
/ 22 апреля 2009

У меня есть этот класс:

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

И этот делегат обработчика событий для него:

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

В настоящее время они находятся в одном и том же файле в пространстве имен. Это считается плохим / грязным / и т.д.? Потому что в целом я бы сказал, что каждый файл должен содержать только один класс. Поэтому, чтобы он был чистым, я бы предпочел иметь класс GenericEventArgs в одном файле. Но тогда у меня есть этот GenericEventHandler<T> делегат, который я не уверен, где мне следует разместить. Должен ли он иметь свой собственный файл? Только с ... одной линией? (и пространство имен конечно)

Как ты обычно это делаешь?

Ответы [ 4 ]

9 голосов
/ 22 апреля 2009

Есть ли причина не использовать EventHandler<TEventArgs>? Я думал, что есть эквивалент EventArgs<T>, но в данный момент я его не вижу ... Во всяком случае, я бы положил GenericEventArgs в GenericEventArgs.cs

Лично, когда я хочу представить свои собственные типы делегатов (которые, если честно, все реже), я создаю файл Delegates.cs со всеми соответствующими делегатами для пространства имен. Затем я знаю, где их найти, не имея файл для одной декларации.

2 голосов
/ 22 апреля 2009

Когда я хотел создать своих собственных делегатов обработчика событий, я использовал для создания одного файла, который имел имя класса EventArgs, который я использовал в своем собственном делегате обработчика событий. Например, «MyEventArgs.cs».

Этот файл содержал класс MyEventArgs и делегат MyEventHandler, который использовал этот класс.

Теперь, однако, я использую существующий универсальный EventHandler (EventHandler<T>), и мне нужно только создать свой собственный класс EventArgs. Таким образом, эта «проблема» больше не существует для меня. :)

1 голос
/ 22 апреля 2009

Ну, я бы поместил класс GenericEventArgs<T> в его собственный файл с именем

GenericEventArgs_T.cs в том же пространстве имен, что и все остальные.

И я бы поместил вашего делегата (и событие, если оно есть) в класс, которому будет показано это событие.

0 голосов
/ 22 апреля 2009

Я бы сделал то, что вы уже делаете, а затем поместил бы все делегаты, которые не используются для событий, в отдельный файл .cs с именем Delegates.cs или что-то подобное.

...