在这种情况下我可以使用 C# 列表吗?
Can I use a C# List in this case?
我有一个相似类型的操作列表,我需要为其创建不同的 classes ActionClass1
、ActionClass2
。
此外,我有不同的站点,我需要在这些站点上执行一系列不同的操作。请注意,此列表的内容将取决于站点。
我想开发一个 GUI 以便能够使用 c# 和 WPF 编辑在给定站点上执行的操作 SiteClass
。
我现在的想法是:
- Subclass 不同的动作 classes
ActionClass1
等来自一个普通的抽象动作 class AbstractActionClass
.
- 创建列表
ActionList
of AbstractActionClass
,其中将包含不同的操作作为具体实现(例如 ActionClass1
等)。
- 创建
SiteList
SiteClass
实例的列表,其中将包含网站及其相应的操作列表和附加信息(例如网站位置等)。
到目前为止,我对上述内容有了一个很好的了解。但是,我现在需要能够为每个站点编辑 ActionList
并在 GUI 中对其进行样式设置,以便所有具有相同 ActionList
的站点看起来都相同(例如具有相同的颜色)。因此,我需要能够比较 SiteList
中 SiteClass
的每个实例的 ActionList
以检查它们是否不同,找出有多少不同的实例,然后相应地设置它们的样式在 GUI 中。
所以我的问题是:我是否可以在 SiteClass
中使用 ActionList List<AbstractActionClass>
类型的列表来执行 'Unique' 等比较以找出数字SiteList List<SiteClass>
中唯一出现的 ActionList List<AbstractActionClass>
并将此信息用于样式?有没有更好的方法?
简答:是
详细解答。您可以创建一个 List<AbstractionClass>
并处理不同的渲染,您可以采用两种方法:
在 class 中添加摘要 属性,告诉您 class 是什么:
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
}
您可以抽象列表本身:
public class ActionClassList : List<ActionClass>
{
public abstract string ClassType { get;}
}
并将 ActionClassList1 和 ActionClassList2 实施到 return 不同的类类型。
在接收端,您始终接受 ActionClassList,但它可以是您获得的派生 classes 之一。
是的。这可以在 C# 中以多种方式完成,但是 C# 列表对于这个来说并不是一个坏主意,因为你很熟悉并且可以更好地理解这个想法,所以我不会说使用 C# 列表有什么不妥。
我有一个相似类型的操作列表,我需要为其创建不同的 classes ActionClass1
、ActionClass2
。
此外,我有不同的站点,我需要在这些站点上执行一系列不同的操作。请注意,此列表的内容将取决于站点。
我想开发一个 GUI 以便能够使用 c# 和 WPF 编辑在给定站点上执行的操作 SiteClass
。
我现在的想法是:
- Subclass 不同的动作 classes
ActionClass1
等来自一个普通的抽象动作 classAbstractActionClass
. - 创建列表
ActionList
ofAbstractActionClass
,其中将包含不同的操作作为具体实现(例如ActionClass1
等)。 - 创建
SiteList
SiteClass
实例的列表,其中将包含网站及其相应的操作列表和附加信息(例如网站位置等)。
到目前为止,我对上述内容有了一个很好的了解。但是,我现在需要能够为每个站点编辑 ActionList
并在 GUI 中对其进行样式设置,以便所有具有相同 ActionList
的站点看起来都相同(例如具有相同的颜色)。因此,我需要能够比较 SiteList
中 SiteClass
的每个实例的 ActionList
以检查它们是否不同,找出有多少不同的实例,然后相应地设置它们的样式在 GUI 中。
所以我的问题是:我是否可以在 SiteClass
中使用 ActionList List<AbstractActionClass>
类型的列表来执行 'Unique' 等比较以找出数字SiteList List<SiteClass>
中唯一出现的 ActionList List<AbstractActionClass>
并将此信息用于样式?有没有更好的方法?
简答:是
详细解答。您可以创建一个 List<AbstractionClass>
并处理不同的渲染,您可以采用两种方法:
在 class 中添加摘要 属性,告诉您 class 是什么:
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 }
您可以抽象列表本身:
public class ActionClassList : List<ActionClass> { public abstract string ClassType { get;} }
并将 ActionClassList1 和 ActionClassList2 实施到 return 不同的类类型。
在接收端,您始终接受 ActionClassList,但它可以是您获得的派生 classes 之一。
是的。这可以在 C# 中以多种方式完成,但是 C# 列表对于这个来说并不是一个坏主意,因为你很熟悉并且可以更好地理解这个想法,所以我不会说使用 C# 列表有什么不妥。