因此,假设我正在用 C# 构建某种房地产应用程序。对于每种类型的财产,我将创建一个类,例如 ResidentialProperty 和 CommercialProperty。这两个类以及所有其他属性类将共享一些公共属性,例如 Id、标题、描述和地址信息。
我希望能够做的是:
a) 返回仅包含基本信息的对象集合
b) 能够调用 GetProperty(id) 等方法,该方法将创建并返回 ResidentialProperty 或 CommercialProperty,或者调用 GetProperties(),该方法将返回其中之一或两者的集合。
因此,创建一个名为 BasicProperty(或 PropertyBase)的抽象类可能是有意义的,它包含所有公共属性,并从它扩展 ResidentialProperty 和 CommercialProperty。这将解决问题 #1,因为我可以创建一个返回 BasicProperties 集合的方法。
但对于#2,能够返回一种属性类型或另一种属性类型,我需要一个接口(IProperty),并让住宅和商业类继承它,然后让 GetProperty(id) 和 GetProperties() 返回IProperty 对象(或者因为它们继承自 IProperty,我可以按原样返回它们而不是作为接口吗?)?
现在,如果我应该使用接口,我该如何处理 BasicProperty 类?
- 我是否将其保留为抽象并实现接口?或者
- 我是否将其保留为抽象并且所有 3 个类都实现该接口?或者
- 我不是将其创建为抽象,将所有基本信息放入接口中,并且BasicProperty、ResidentialProperty和CommercialProperty都实现该接口吗?
提前致谢,
卡尔·J。
虽然我觉得一开始就定义一个接口几乎是always一个好主意,只是因为它可以帮助您的代码在将来变得灵活,听起来在这种情况下您实际上并没有need要做到这一点。你的GetProperty
and GetProperties
方法可以使用抽象基类作为返回值。
可以这样想:如果我有一个名为GetShape
?它大概会返回一个Shape
, 正确的?比方说Shape
是一个抽象基类,还有一些派生类Triangle
, Square
, Circle
, etc.
不过是个三角形is一个形状,一个正方形is形状等等——其中每一个都恰好超过just一个形状,但他们是形状尽管如此。因此,如果我说“给我一个形状”,而你递给我一个正方形,那么你就按照我的要求做了。那里没有什么有趣的事情。
这是 OOP 的核心基本原则之一:派生类的实例is其基类的实例;这也只是more比起那个来说。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)