1

同じメソッドを提供しているインターフェイスのメソッド定義をどのように参照できますか。クラスでその関数を定義したいと思います。たとえば、私は2つのインターフェイスを持っています

 public interface i1
{
    void show();

}

public interface i2
{
    void show();
}

クラスClassAがこれらのインターフェースを実装するとします。それらは定義で矛盾しますか、それともどのように定義すればよいですか。

4

2 に答える 2

2

競合が発生する可能性がある場合は1つだけです。つまり、同じシグニチャを持つ1つのクラスに複数のメソッドが必要な場合です(メソッド名とパラメータは同じです)。通常、この競合を解決するには、1つのメソッドの名前を変更するだけです。ただし、インターフェイスを実装する場合、実装されたメソッドのシグネチャを変更することはできません。複数のインターフェースに同じシグニチャーを持つメソッドがあり、そのメソッドの異なる実装が必要な場合は、明示的なインターフェースの実装を使用して競合を解決します。

public class A : i1, i2
{
   void i1.show() { ... }
   void i2.show() { ... }
}

使用法:

A a = new A();
i1 x = (i1)a;
x.show(); // will call i1.show() implementation

@ryadavilliが述べたように、異なるインターフェースに対して異なる実装が必要な場合にのみ、明示的な実装が必要です。それ以外の場合、1つのshow()メソッドで両方のインターフェイスが満たされます。メソッドが1つしかない場合、競合はありません。

ところで、C#ではメソッドの命名にPascalCaseを使用しています。

于 2012-11-18T10:03:12.153 に答える
1

あなたはこれを行うことができます

class A : i1, i2
{
    void i1.show()
    {
        Console.WriteLine("1");
    }

    void i2.show()
    {
        Console.WriteLine("2");
    }
}

両方のshow()に対して単一の実装が必要な場合

class A : i1, i2
{
    public void show()
    {
        Console.WriteLine("common method.");
    }
}
于 2012-11-18T10:03:38.570 に答える