c# – 在实现具有对象类型属性的接口的类中更改属性类型
发布时间:2020-12-15 06:26:44 所属栏目:百科 来源:网络整理
导读:我正在编写一个TemplateEngine,它允许我在基于文本的文件中使用我自己的标记.我想在应用程序成熟时添加控件作为插件.目前我有一个如下结构: interface IControl string Id object Valueclass Label : IControl string Id string Valueclass Repeater : ICon
我正在编写一个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; } } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |