c# – 在实现具有对象类型属性的接口的类中更改属性类型

前端之家收集整理的这篇文章主要介绍了c# – 在实现具有对象类型属性的接口的类中更改属性类型前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在编写一个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; }
    }
}

猜你在找的C#相关文章