将Custom属性添加到常见控件问题

时间:2012-02-08 19:48:40

标签: c# interface implementation

我想知道是否有更好的方法将Interface实现为自定义控件。 我正在自定义按钮控件中实现一个接口,并引用我需要将实现的属性转换为接口类型以实现它。

有没有办法直接引用它?我是否需要在按钮类中创建一个warper属性,以将其暴露给外界?

namespace WorkBench
{
    public partial class Form1 : Form
    {
        //Binding bind;

        public Form1()
        {
            InitializeComponent();

            MyButton btn = new MyButton();
            btn.Myproperty = "";
            ((MyInterface)btn).MyProp = "";
            btn.MyProp = "Not Available";//This give compile error, MyProp not defined
        }


    }

    public class MyButton : System.Windows.Forms.Button, MyInterface
    {
        public string Myproperty
        {
            get { return null; }
            set { }
        }
        string MyInterface.MyProp
        { get { return null; } set { } }


    }

    public interface MyInterface
    {
        void MyOtherPropoerty();

        string MyProp
        {
            get;
            set;
        }

    }
}

1 个答案:

答案 0 :(得分:1)

您似乎希望界面存储值集。接口只是一个类必须实现其所有成员的契约。即使您注释掉引发错误的行,您也会收到编译时错误,即MyButton类未实现MyInterface的所有成员。

您需要在string MyProp课程上实施MyButton

public class MyButton : System.Windows.Forms.Button, MyInterface
{
    public string MyProperty
    {
        get { return null; }
        set { /* ??? */ }
    }
    public string MyProp { get; set; } // <------ Implement string MyProp
}

但是,如果你真正想要做的是在多个类之间共享一个属性,你可以考虑使用基类:

public class MyControlBase
    : System.Windows.Forms.Button
{
    public string MyProp { get; set; }
}

public class MyButton : MyControlBase
{
    public string MyProperty { get; set; }
}

-

void Example()
{
    var btn = new MyButton();
    var property = btn.MyProperty;
    var prop = btn.MyProp;
}