【发布时间】:2015-05-05 04:43:23
【问题描述】:
我有一个网页,用户可以在其中将某些小部件拖放到一个占位符中。每个小部件都有自己的一组属性。
例如,假设我有以下 HTML 小部件:
Widget1:
- Title field
- Technical name field
还有一个更动态的小部件:
Widget2:
- Range picker field 1 (0 to 100)
- Range picker field 2 (0 to 100)
------------------
| (+) Add picker |
------------------
(can add as many range pickers as needed)
现在只需单击一个按钮,这些设置就会保存到数据库中。但在某些时候,我还需要再次从中读取数据。
例如,假设我有以下小部件类:
interface IWidget { }
class Widget1 : IWidget
{
public string Title {get;set;}
public string TechnicalName {get;set;}
}
class Widget2 : IWidget
{
public List<int> PickerValues {get;set;}
}
然后将其存储在List。
var widgets = new List<IWidget>();
widgets.Add(new Widget1());
widgets.Add(new Widget2());
那会奏效。但是再次从该列表中获取对象是一个问题:
var widget = widgets.First();
widget.????? // <-- NO INTELLISENSE!
这意味着它不知道它有什么实际的实现。我必须投它。但是,如果我不知道那里存储了哪些小部件,该怎么办?它可以是 1、5 甚至 10 个不同小部件的列表,以任意顺序排列。
我该如何解决这个问题?
【问题讨论】:
-
使用接口创建抽象的要点是您不应该关心具体的实现。目前,您的界面毫无意义。你想用这些小部件做什么?
-
从列表中拉出 IWidget 后,您想对它做什么?
-
IWidget没有定义任何成员,因此您不会获得任何智能感知。您需要在界面中放置常用功能,否则是的,您将不得不转换。
标签: c# .net asp.net-core-mvc