我想知道是否有更好的方法将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;
}
}
}
答案 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;
}