[英].NET (C#) events - custom EventArgs question
我有许多C#自定义事件与树中选择的项目相关联,然后使用上下文菜单触发对所选项目的某些操作。 我开始为每个自定义事件创建一个单独的基于EventArgs的类,以打包事件的必要数据。
在后视中,我意识到我的大多数(可能是所有)自定义事件都需要至少传递树选择所代表的底层对象列表。 有些事件也可能需要额外的数据。
考虑到这一点,我想知道以下任何一种是否是可接受的做法?
对多个事件使用相同的基于EventArgs的自定义类(那些只需要传递对象列表的事件)。 显然,这应该可行,但似乎脱离了一些用于连接事件机制的推荐命名约定。
创建一个基类,它包装我经常需要的对象列表,然后从中派生其他类,因为需要额外的数据。
也许还有别的什么呢?
目前,我只有少数自定义事件,但需要添加更多。 由于我看到每个事件所需的数据出现了一种模式,我希望在继续之前有一个更好的计划。
谢谢你的建议。
我以前做过这条路。 我第二次想到了一个包含公共数据的基本事件类。 如果没有事件将直接使用它,请将基类设置为内部,以避免向用户公开不必要的对象。 拥有基类还允许您以后添加更多事件数据。 由于该类是内部的,因此它的用户在外部不受更改的影响。
.NET框架中有很多这样的例子。 沿着同样的路线做某事是非常一致的。 这是一对夫妇:
我可能会使用这样的类( 不是抽象的)。
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
public class CollectionEventArgs<T> : EventArgs
{
public static readonly CollectionEventArgs<T> Empty = new CollectionEventArgs<T>();
public CollectionEventArgs(params T[] items)
{
this.Items = new ReadOnlyCollection<T>(items);
}
public CollectionEventArgs(IEnumerable<T> items)
{
this.Items = new ReadOnlyCollection<T>(items.ToArray());
}
public ReadOnlyCollection<T> Items
{
get;
private set;
}
}
我会选择一和二。 创建一个可用于大多数事件的基类,然后从该类派生出需要其他事件的事件。 如果你看看它们构建方式的.NET库。
只需确保使用适当的命名约定即可。 基类不应包含特定事件的名称,只有在一个事件中使用的类才应引用事件的名称。 基类可能包含控件的名称。
你的意思是
public class EventArgs<TValue> : EventArgs
{
public TValue Value { get; }
/* ... */
}
?
在哪里我可以使用任何我喜欢的Value
?
是的,我很高兴使用这样的东西。 我不认为这是一个问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.