【发布时间】:2013-11-27 10:28:48
【问题描述】:
我在我的一个项目中实现了视觉继承。从基础形式有两种派生形式。我也有两个来自一个基类的常规派生类。每个派生形式都处理派生类之一,该派生类实例化适当类的对象。例如,有一个名为“letter”的基本形式和两个派生形式“A”和“B”,而有一个基类“base”和两个派生类“a”和“b”。当我“调用”“A”时,“a”中的对象被实例化,“b”和“B”的规则相同。
我在“A”表单上所做的是使用多个文本框来填充“a”类中对象的属性,并且在“B”表单的情况下,从“类”中填充对象的属性b"。
我有点期待做的是从程序的某个点“调用”每个表单(“A”或“B”) - 在这种情况下,另一个表单 - 并处理我拥有的对象用正确形式的事件实例化。
问题是我的“A”和“B”表单中的事件代码在 95% 的情况下都是相同的。我首先认为我可以将所有这些放在基本形式(“字母”)上并在那里使用派生对象,但我不能。这基本上是因为我不能使用我在派生表单上实例化的对象以及来自基本表单的事件。例如,我不能使用我在“A”上创建的“a”类中的一个对象以及“字母”上的事件,尽管我可以使用我在“上”创建的“a”类中的一个对象字母”与“A”上的事件。经过一番思考,我确实明白为什么会发生这种情况。
我的解决方案是将所有事件代码放在“A”和“B”表格上,效果很好。
问题是我的表单“A”和“B”中的事件在 95% 的情况下仍然相似。我认为我正在做一些非常混乱和不必要的事情。所以,我的问题是:如何优化我的工作,以便我只能编写一次事件?大声笑,长帖子和短问题。感谢您的帮助。
谢谢,
里卡多·S.
【问题讨论】:
-
我认为我们可能需要某种图表来显示这些类之间的关系以及常用方法。可能您只需要将一个实例Cast 转换为不同的类型。您可能正在寻找 Interface 而不是继承,但我无法判断,因为它非常令人困惑。
-
您将不得不发布一个示例事件处理程序。您可能会通过一些重构来做到这一点,因此基本形式可以在子类中调用覆盖的虚拟,甚至可以使用泛型。我们需要看到更多。 Alos,请编辑您的帖子并去掉“a”、“b”和“c”作为类名。将您的示例重命名为更详细的名称以增加清晰度。甚至“FormA”、“BaseClass”、“ChildClassB”也更好。
标签: vb.net winforms inheritance visual-inheritance