【问题标题】:Call derived class from base class (VB.NET)从基类调用派生类 (VB.NET)
【发布时间】:2015-09-11 17:40:52
【问题描述】:

我创建了一个通用基类,用于跟踪也具有通用基的特定表单类型的打开表单(路由器)。当我需要从派生路由器类调用唯一的派生表单方法时,就会出现问题。有没有办法做到这一点? 表单路由器基类有 字典(字符串,表格) 派生表单路由器需要调用存储在此字典中的派生表单的唯一方法。问题在于,Visual Studio 将字典中的类型视为基本表单类,而不是派生表单类(但如果我在运行时执行 get 类型,则对象属于派生表单类)。

我尝试过创建可覆盖的属性和函数,但类型必须在基类中指定,仅使用“对象”不起作用。

如果需要,我可以发布代码,但我试图保持简单和通用。 谢谢!

【问题讨论】:

    标签: vb.net oop


    【解决方案1】:

    将字典中的值转换为派生类型:

    Dim frmDerivedForm As YourDerivedForm = CType(yourDictionary("yourKey"), YourDerivedForm)
    
    frmDerivedForm.DerivedFormMembers()
    

    【讨论】:

    • 这是票!谢谢!我一直读到这无法完成,也找不到正确的尝试方法。
    • 我很高兴有帮助。如果它解决了您的问题,请将其标记为已接受的答案。
    【解决方案2】:

    您是否尝试过仅投射它们? (这个未经测试)

    Form form;
    if(form is DerivedForm)
        (form as DerivedForm).DerivedField = "asdf";
    

    Form form;
    if(form is DerivedForm)
        ((DerivedForm)form).DerivedField = "asdf";
    

    【讨论】:

      【解决方案3】:

      在您的基类中创建一个受保护的 Overridable(虚拟)方法,该方法接受您需要发送到派生类的数据并返回您需要从派生类获取的数据,然后在派生(继承) 上课并做你需要的。

      【讨论】:

      • 感谢 Doker 的回复。我一直在寻找一种不必为派生类的每个方法调用都修改基类的方法。 NoAlias 的建议有效。
      • 那么访客模式适合您。它很重,但它正好满足了这个要求
      猜你喜欢
      • 2011-06-19
      • 2017-08-26
      • 2014-03-17
      • 1970-01-01
      • 2011-05-11
      • 1970-01-01
      • 2016-07-06
      • 2014-02-15
      • 2013-03-28
      相关资源
      最近更新 更多