在多个类中共享公共属性的最佳方式是什么?

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)

由于本例中的属性ab正在重复,那么共享这些属性的最佳方式是什么?

目的是尽可能地重用代码。使用继承来共享数据成员是正确的做法吗?

Chr*_*phe 5

在类之间共享属性和行为(方法/操作)的常用方法是使用继承

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 对象。