Sha*_*ena -1 c# java oop datacontract reusability
在多个类中共享公共属性的最佳方法是什么?
例如:
Class A
{
int a;
int b;
int c;
}
Class B
{
int a;
int b;
int d;
}
Run Code Online (Sandbox Code Playgroud)
由于本例中的属性a和b正在重复,那么共享这些属性的最佳方式是什么?
目的是尽可能地重用代码。使用继承来共享数据成员是正确的做法吗?
在类之间共享属性和行为(方法/操作)的常用方法是使用继承:
Class X { // Common base
int a;
int b;
}
Class A:X { // One specialization
int c;
}
Class B:X { // Another specialization
int d;
}
Run Code Online (Sandbox Code Playgroud)
这有利于重用,因为您可以在不同的上下文中重用 X 的实现。
但使用继承不仅仅是共享一些元素:继承还定义了一种泛化/特化关系:A 是一种特殊的 X。这意味着人们可能希望在使用 X 的地方也可以使用 A。此外,这是一种确定的关系:A 始终是 X。
但正如你所指出的,如果只是为了共享,并且在没有任何概念关系的情况下,使用继承来节省一些击键可能不是最明智的想法。如果有疑问,您可能更喜欢组合而不是继承:
Class X { // Some elements to be shared
int a;
int b;
}
Class A { // Independent class
X x;
int c;
}
Class B:X { // Another independent class
X x;
int d;
}
Run Code Online (Sandbox Code Playgroud)
每个 A 和 B 都有一个属性 x,其中包含共享的 a 和 b。优点是A和B不受X接口实现的限制。此外,关系是动态的(例如,您可以没有定义 x,或者 x 可以更改)。此外,根据语言的不同,您甚至可以在多个 A 和 B 对象之间共享相同的 x 对象。