我正在编写一个TemplateEngine,它允许我在基于文本的文件中使用我自己的标记.我想在应用程序成熟时添加控件作为插件.目前我有一个如下结构:
interface IControl
string Id
object Value
class Label : IControl
string Id
string Value
class Repeater : IControl
string Id
List<IControl> Value
Run Code Online (Sandbox Code Playgroud)
现在,您将使用Value属性立即在Repeater类中看到奇怪的部分.我希望在界面中将Value类型作为对象可以让我灵活地扩展控件.编译器不喜欢这个,我猜这是有充分理由的.
结论:我正在尝试让所有控件类实现相同的接口,但Value属性具有不同的类型.
有没有人有任何建议如何实现这一目标?
注意:请不要建议使用Spark View Engine进行模板化.我有理由为自己创造额外的工作.
通常Repeater会实现不同的东西,IItemsControl例如.
编辑1
(为简洁起见,删除)
编辑2
好吧,你当然可以使用显式接口实现:
interface IControl
{
string Id { get; set; }
object Value { get; set; }
}
class Label : IControl
{
public string Id { get; set; }
public string Value { get; set; }
object IControl.Value
{
get { return this.Value; }
set { this.Value = (string)value; }
}
}
class Repeater : IControl
{
public string Id { get; set; }
public IList<IControl> Value { get; set; }
object IControl.Value
{
get { return this.Value; }
set { this.Value = (IList<IControl>)value; }
}
}
Run Code Online (Sandbox Code Playgroud)