5

私はインターフェイスを使用するのが初めてなので、おそらくほとんどの人にとって非常に簡単な質問があります.

現在、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

4 に答える 4

2

これにアプローチする 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);
于 2013-08-13T12:49:20.643 に答える
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
于 2013-08-13T12:55:59.387 に答える
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()

必要なものはすべてそこにありますが、意図したものとは異なる方法でそれらを参照する必要があります。

于 2013-08-13T12:45:41.653 に答える