我正在编写一个TemplateEngine,它允许我在基于文本的文件中使用我自己的标记.我想在应用程序成熟时添加控件作为插件.目前我有一个如下结构:
interface IControl string Id object Value class Label : IControl string Id string Value class Repeater : IControl string Id List<IControl> Value
现在,您将使用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; } } }