0

インターフェイスはどのクラスメソッドを呼び出すかをどのように知っていますか? それは正しいコードですか?か否か

namespace IntExample
{
    interface Iinterface
    {
       void add();
       void sub();
    }
    public partial class Form1 : Form,Iinterface
    {
        public Form1()
        {
            InitializeComponent();
        }


        public void add()
        {

            int a, b, c;
            a = Convert.ToInt32(txtnum1.Text);
            b = Convert.ToInt32(txtnum2.Text);
            c = a + b;
            txtresult.Text = c.ToString();



        }
        public void sub()
        {

            int a, b, c;
            a = Convert.ToInt32(txtnum1.Text);
            b = Convert.ToInt32(txtnum2.Text);
            c = a - b;
            txtresult.Text = c.ToString();

        }


        private void btnadd_Click(object sender, EventArgs e)
        {
            add();
        }

        private void button2_Click(object sender, EventArgs e)
        {
            sub();
        }



        class cl2 : Form1,Iinterface
        {

            public void add()
            {

                int a, b, c;
                a = Convert.ToInt32(txtnum1.Text);
                b = Convert.ToInt32(txtnum2.Text);
                c = a + b;
                txtresult.Text = c.ToString();



            }
        }

        private void Form1_Load(object sender, EventArgs e)
        {

        }
4

1 に答える 1

0

インターフェイスは、どのクラス メソッドを呼び出すかを「認識」していません。利用可能なメソッドを定義するだけです。

cl2メソッドを実装していないため、投稿したコードはコンパイルされませんsubが、とにかくほとんど意味がありません。

あなたが何をしようとしているのかわからないので、インターフェースの有効な使用例を示します。

そのインターフェイスを実装するフォームをいくつか持つことができます。次に、メイン フォームで、インデックスまたは名前に従って表示するフォームを選択できます。

したがって、すべてのフォームを保存するには、ジェネリック リストを使用できます。

List<Iinterface> forms = new List<Iinterface>();

インターフェイスを実装するすべてのフォームをリストに追加します。

forms.Add(new Form1());
forms.Add(new Form2());
forms.Add(new Form3());
//...

次に、特定のフォームを表示し、インターフェースからメソッドを呼び出すことができます:

//find by index:
forms[index].Show();
forms[index].add();

//find by name:
string name="form 2";
Iinterface form = forms.Find(f => f.Name == name);
if (form != null)
{
    form.Show();
    form.add();
}
于 2012-12-12T09:48:19.450 に答える