据我所知,空接口通常被认为是不好的做法-特别是在语言支持的属性之类的地方。
但是,如果某个接口继承自其他接口,是否将其视为“空”?
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的回答中提出的要点)