使用Windows窗体实现接口

时间:2013-08-13 12:41:22

标签: c# winforms interface

我是新手使用界面,所以我有一个问题对大多数人来说可能很容易。

我目前正在尝试为Windows窗体创建一个界面。它看起来像

interface myInterface
{
    //stuff stuff stuff
}

public partial class myClass : Form, myInterface
{
   //More stuff stuff stuff. This is the form
}

当我尝试实现它时,问题出现了。如果我用

实现
myInterface blah = new myClass();
blah.ShowDialog();

现在可以使用ShowDialog()函数。它是有道理的 - myInterface是一个接口,而不是一个表单...但我很好奇我应该如何使用Windows窗体实现接口,或者它甚至是一个可行的选项。

有没有人对我应该怎么做呢?

谢谢!

4 个答案:

答案 0 :(得分:2)

interface MyInterface
{
    void Foo();
}

public partial class MyClass : Form, MyInterface
{
   //More stuff stuff stuff. This is the form
}

Form f = new MyClass();
f.ShowDialog(); // Works because MyClass implements Form
f.Foo(); // Works because MyClass implements MyInterface

答案 1 :(得分:1)

解决这个问题的一种方法是将ShowDialog添加到myInterface:

 interface myInterface
 {
     DialogResult ShowDialog();
 }

现在,您可以在界面上调用该方法而无需强制转换。

如果你想更喜欢它,你可以创建另一个代表任何对话框的界面......

interface IDialog
{
     DialogResult ShowDialog();
}

然后让你的其他界面实现IDialog:

interface myInterface : IDialog
{
     //stuff stuff stuff
}

这样做的好处是可能会重复使用更多代码......您可以使用接受IDialog类型参数的方法,而且他们不必了解myInterface。如果为所有对话框实现公共基本界面,则可以采用相同的方式处理:

void DialogHelperMethod(IDialog dialog)
{
     dialog.ShowDialog();
}

myInterface foo = new myClass();
DialogHelperMethod(foo);

答案 2 :(得分:1)

这似乎是关于如何正确公开类成员的问题。

internal - Access to a method/class is restricted to the application
public - Access is not restricted
private - Access is restricted to the current class (methods)
protected - Access is restricted to the current class and its inherited classes

接口的一个示例用法是在类之间共享公共方法签名

interface IAnimal
{
    int FeetCount();
}
public class Dog : IAnimal
{
    int FeetCount()
    {
    }
}

public class Duck : IAnimal
{
    int FeetCount()
    {
    }
}

答案 3 :(得分:0)

您只能访问用于保存myClass的类型公开的项目。例如,

Form f = new MyClass();
f.ShowDialog();  // Will work because f is of type Form, which has a ShowDialog method
f.stuff(); // Works because MyClass implements myInterface which exposes stuff()

你想要的所有东西都在那里,但你必须以不同的方式引用它们。