【发布时间】:2017-11-01 15:00:57
【问题描述】:
我想知道继承的用例。具体来说,我在 C# 中有一个情况,我有一个 Axis 类,您可以在其中给类一个字符串名称,以及其他属性。因此,您可以编写 (new Axis(“X”)) 来创建一个名为 X 的 Axis。
因为通常您会想要创建 X、Y 和 Z 轴,所以我倾向于创建名为 X、Y 和 Z 的 Axis 的三个子类,每个子类在构造函数中指定 Axis 名称是什么。
目前 Axis 类中的代码并不多,因此代码重用非常少(当然这可能会改变)。公平地说,用 (new Axis(“X”)) 代替 (new X()) 也没有那么麻烦。
无论如何,我想知道的是这样编写我的代码是否有任何缺点,或者这样写代码是否不常见。非常感谢!
【问题讨论】:
-
为什么不将
Axis上的静态属性称为X、Y和Z?这些可以返回Axis的新实例或(可选)共享实例(取决于Axis是否具有可变状态)。您认为这些子类添加需要它们成为不同的类吗? -
一般来说,创建一个新类的原因是为了增加功能。但是,有时,如果您像您正在考虑的那样创建一个“代理名称”,它确实可以提高可读性。尝试像阅读故事一样阅读您的代码,并根据使故事更易于理解的原因做出决定。
-
这是正确设计的可能性不是很大。轴的方向只是一个属性,我想不到很多理由仅仅因为轴指向不同的方向而重写或添加方法。如果您想隐藏“X”,请考虑使用对象工厂。
-
如果您希望限制应该使用哪些值构建轴,您可以考虑创建一个值为 X、Y、Z 的 emum。您可以将枚举传递给轴构造函数,并在其中设置名称(如果仍然需要)。
标签: c# inheritance naming-conventions conventions