加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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; }
    }
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读