Boş arayüzler genellikle anlayabildiğim kadarıyla kötü uygulamaları düşünür - özellikle nitelikler gibi şeylerin dil tarafından desteklendiği yerlerde.
Ancak, bir arabirim diğer arabirimlerden miras alırsa 'boş' sayılır mı?
interface I1 { ... }
interface I2 { ... } //unrelated to I1
interface I3
: I1, I2
{
// empty body
}
Uygulayan her şeyin uygulanması I3
gerekir I1
ve I2
devralınan farklı sınıflardan nesneler I3
daha sonra birbirinin yerine kullanılabilir (aşağıya bakın), I3
boş çağırmak doğru mu? Eğer öyleyse bunu mimarileştirmenin daha iyi bir yolu ne olurdu?
// 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
? (Cevabınız "evet" ise, devam edin!)
var : I1, I2 something = new A();
yerel değişkenler gibi bazı sözdizimleri iyi olurdu (Konrad'ın cevabında ortaya çıkan iyi noktaları görmezden