同じメソッドを提供しているインターフェイスのメソッド定義をどのように参照できますか。クラスでその関数を定義したいと思います。たとえば、私は2つのインターフェイスを持っています
public interface i1
{
void show();
}
public interface i2
{
void show();
}
クラスClassAがこれらのインターフェースを実装するとします。それらは定義で矛盾しますか、それともどのように定義すればよいですか。
同じメソッドを提供しているインターフェイスのメソッド定義をどのように参照できますか。クラスでその関数を定義したいと思います。たとえば、私は2つのインターフェイスを持っています
public interface i1
{
void show();
}
public interface i2
{
void show();
}
クラスClassAがこれらのインターフェースを実装するとします。それらは定義で矛盾しますか、それともどのように定義すればよいですか。
競合が発生する可能性がある場合は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を使用しています。
あなたはこれを行うことができます
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.");
}
}