2012-02-08 108 views
0

我想知道是否有更好的方法将Interface实现为自定义控件。 我在自定义按钮控件中实现了一个接口,并且引用了我需要将按钮转换为接口类型以实现它的已实现的属性。将自定义属性添加到常见控制问题

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

​​

回答

1

看来您期望接口存储值集。接口只是类必须实现其所有成员的契约。即使您注释掉发生错误的行,您也会收到编译时错误,您的MyButton类不会实现MyInterface的所有成员。

你需要在你的MyButton类上实现string MyProp

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

在多个类之间共享一个属性,是我想要做的。但对于多种类型的控件,组合框,文本框,按钮,组框。那就是为什么我要使用Interface。但是我面对的是实施的财产不能直接访问的事实。 (您的错误实施是正确的,这是我的错误) – Hugo 2012-02-08 20:18:09