我是新手使用界面,所以我有一个问题对大多数人来说可能很容易。
我目前正在尝试为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窗体实现接口,或者它甚至是一个可行的选项。
有没有人对我应该怎么做呢?
谢谢!
答案 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()
你想要的所有东西都在那里,但你必须以不同的方式引用它们。