Ron*_*ter 1 delphi polymorphism
我们有一个应用程序可以相当广泛地使用 TIniFile。过去我们创建了自己的后代类,我们称之为 TMyIniFile,它覆盖了 WriteString。我们创建了一个整个应用程序都使用的实例。该实例通过属性和参数四处传递,但所有这些的类型仍然是 TIniFile,因为它是原始的。这似乎有效,通过多态调用我们覆盖的方法,即使所有变量类型仍然是 TIniFile。这似乎是正确的,因为我们来自 TIniFile。
现在我们正在进行一些更改,我们希望将 TMyIniFile 切换为从 TMemIniFile 而不是 TIniFile 的后代。它们都是 TCustomIniFile 的后代。我们也可能会覆盖更多的方法。我倾向于将所有声明保留为 TIniFile,即使从技术上讲我们的类不再是它的后代,只是为了避免在不需要时更改大量源文件。
在多态的每个教程示例中,变量都被声明为基类,并创建后代类的实例并将其分配给基类的变量。所以我认为这是做到这一点的“正确”方式。我现在正在做的事情最终会将变量声明为,我猜你会称之为“兄弟”类,所以这“似乎是错误的”。这是一件坏事吗?我是在自找麻烦,还是多态性实际上允许这种事情?
TIniFile和TMemIniFile是不同的类,彼此不派生,因此您根本无法创建TMemIniFile对象并将其分配给TIniFile变量,反之亦然。编译器不会让你这样做。使用类型转换来强制它会很危险。
您只需要更新其余代码即可将所有TIniFile声明TCustomIniFile改为,这是两个类的共同祖先。这才是“正确”的做法。
| 归档时间: |
|
| 查看次数: |
110 次 |
| 最近记录: |