我有一系列相似类型的操作,我需要为其创建不同的类ActionClass1
,ActionClass2
。
此外,我有不同的网站,我需要在其中执行不同的操作列表。请注意,此列表的内容取决于网站。
我想开发一个GUI,以便能够使用c#和WPF编辑在给定网站SiteClass
上执行的操作。
我现在的想法是做以下事情:
ActionClass1
对不同的动作类AbstractActionClass
等进行子类化。ActionList
的{{1}}列表,其中包含不同的操作作为具体实现(例如AbstractActionClass
等)。ActionClass1
个SiteList
个实例的列表,其中包含具有相应操作列表和其他信息(例如网站位置等)的网站。到目前为止,我对上述内容有很好的了解。但是,我现在需要为每个站点编辑SiteClass
并在GUI中对其进行样式设置,以便具有相同ActionList
的所有站点看起来都相同(例如,具有相同的颜色)。因此,我需要能够比较ActionList
中每个ActionList
实例的SiteClass
来检查它们是否不同,找出有多少不同的实例,然后相应地设置它们的样式在GUI中。
所以我的问题是:我是否可以在SiteList
中使用ActionList List<AbstractActionClass>
类型的列表来执行比较,例如&#39; Unique&#39;等,以找出SiteClass
内ActionList List<AbstractActionClass>
的唯一出现次数,并将此信息用于样式?还有更好的方法吗?
答案 0 :(得分:1)
简答:是的
详细答案。您可以创建List<AbstractionClass>
并处理不同的渲染,您可以采取两种方法:
向类中添加一个抽象属性,告诉您该类是什么:
public abstract string ClassType { get; }
并在每个不同的动作列表中实现它作为一个简单的
public override string ClassType { get { return "ActionClass1";}}
然后在渲染代码中执行
行switch (ac.ClassType)
{
case "ActionClass1":
/// render according to class 1;
break;
case "ActionClass2":
/// render according to class 2;
break;
}
你可以做一些简单的演员:
if (ac is ActionClass1)
{
/// render according to class 1
}
else if (ac is ActionClass2)
{
/// render according to class 2
}
您可以抽象List本身:
public class ActionClassList : List<ActionClass>
{
public abstract string ClassType { get;}
}
并实现ActionClassList1和ActionClassList2以返回不同的ClassTypes。
在接收端,你总是接受一个ActionClassList,但它可能是你得到的派生类之一。
答案 1 :(得分:1)
是。这可以在C#中以多种方式完成,但C#列表对此并不是一个坏主意,因为您熟悉并且可以更好地理解这个想法,所以我说使用C#列表没有错。