空のインターフェースは、私が知る限り、一般的に悪い習慣と見なされます-特に属性のようなものが言語によってサポートされている場合。
ただし、他のインターフェイスから継承する場合、そのインターフェイスは「空」と見なされますか?
interface I1 { ... }
interface I2 { ... } //unrelated to I1
interface I3
: I1, I2
{
// empty body
}
実装があることは何もI3
実装する必要がありますI1
とI2
、および継承があること、異なるクラスのオブジェクトI3
、その後(下記参照)を交換可能に使用することができるが、それは右呼び出すことですI3
空の?もしそうなら、これをアーキテクチャ化するより良い方法は何でしょうか?
// with I3 interface
class A : I3 { ... }
class B : I3 { ... }
class Test {
void foo() {
I3 something = new A();
something = new B();
something.SomeI1Function();
something.SomeI2Function();
}
}
// without I3 interface
class A : I1, I2 { ... }
class B : I1, I2 { ... }
class Test {
void foo() {
I1 something = new A();
something = new B();
something.SomeI1Function();
something.SomeI2Function(); // we can't do this without casting first
}
}
foo
か?(答えが「はい」の場合、先に進みます!)
var : I1, I2 something = new A();
、ローカル変数のようないくつかの構文がいいでしょう(Konradの答えで提起された良い点を無視する場合)