我努力为这个问题提出一个好头衔,所以欢迎提出建议。
假设我们有一个抽象的基类ActionBase,它看起来像这样:
public abstract class ActionBase
{
public abstract string Name { get; }
public abstract string Description { get; }
// rest of declaration follows
}
我们定义了许多不同的操作,如MoveFileAction,WriteToRegistryAction等。这些操作附加到Worker对象:
public class Worker
{
private IList<ActionBase> _actions = new List<ActionBase>();
public IList<ActionBase> Actions { get { return _actions; } }
// worker stuff ...
}
到目前为止,非常直截了当。现在,我想要一个用于设置Worker,分配动作,设置属性等的UI。在这个UI中,我想要提供所有可用操作的列表及其属性,为此,我想首先将可用操作的所有名称和描述(以及类型)收集到以下集合中项目类型:
public class ActionDescriptor
{
public string Name { get; }
public string Description { get; }
poblic Type Type { get; }
}
当然,我可以用反射来做到这一点,但是有更好的方法吗?让Name和Description成为ActionBase的实例属性(与派生类上的静态相反)有点惹人注意,但C#中没有抽象静态。
谢谢!
答案 0 :(得分:2)
您所说的是为具体的Action类创建元数据来描述它们。对于名称和描述的简单情况,我推荐DisplayName和Description属性,如下所示:
[DisplayName("MyAction Name")]
[Description("My description goes here")]
public class MyAction : ActionBase
{
//Declaration goes here
}
这些属性在System.ComponentModel
中定义。
答案 1 :(得分:0)
您可以向ActionBase添加一个抽象方法,该方法返回一个ActionDescriptor,然后您可以查询每个操作的描述符。