Visual Basic中实现多态性的技术

1.通过后期绑定实现多态性

Dim obj As New Encapsulation
        MsgBox(obj.DistanceTo(10, 10))
    这里obj变量声明为一个特定的类型(Encapsulation),即它是强类型化的,也叫前期绑定。

在顶端加入:
    Option Strict Off

Dim obj As Object = New Encapsulation

关闭Option Strict后,Visual Basic以特殊的方式处理Object数据类型,允许在对象上尝试调用任意方法,即使Object数据类型并没有实现这些方法也行。是为后期绑定。

2.使用多接口实现多态性

添加模块:

Public Interface IShared
    Function CalculateDistance(ByVal x As Single, ByVal y As Single) As Single
End Interface

Module Interfaces

End Module

‘实现接口1

Public Class Poly
    Implements IShared

'Public Function DistanceTo(ByVal x As Single, ByVal y As Single) As Single
    'Return x + y
    'End Function

Public Function CalculateDistance(ByVal x As Single, ByVal y As Single) As Single Implements IShared.CalculateDistance
        Return x + y
    End Function
End Class
实现接口2

Public Class Encapsulation
    Implements IShared
    Public Function CalculateDistance(ByVal x As Single, ByVal y As Single) As Single Implements IShared.CalculateDistance
        Return CSng(Sqrt((x - mX) ^ 2 + (y - mY) ^ 2))
    End Function

客户端

Private Sub btnEncapsulation_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnEncapsulation.Click
        Dim obj As New Encapsulation
        'Dim obj As New Poly
        '后期绑定
        ShowDistance(obj)
        '接口多态 
        iShowDistance(obj)
    End Sub
    Private Sub ShowDistance(ByVal obj As Object) '后期绑定
        MsgBox(obj.CalculateDistance(10, 10))
    End Sub
    Private Sub iShowDistance(ByVal obj As IShared) '接口多态 
        MsgBox(obj.CalculateDistance(10, 10))
    End Sub

3.使用反射实现多态性

System.Reflection 命名空间

https://docs.microsoft.com/zh-cn/dotnet/api/system.reflection?view=netframework-4.8

System.Reflection 命名空间包含通过检查托管代码中程序集、模块、成员、参数和其他实体的元数据来检索其相关信息的类型。 这些类型还可用于操作加载类型的实例,例如挂钩事件或调用方法。 若要动态创建类型,请使用 System.Reflection.Emit 命名空间。

添加新项目:

Public Class External
    Public Function DistanceTo(ByVal x As Single, ByVal y As Single) As Single
        Return x + y
    End Function
End Class
编译解解决方案后,修改客户端顶端

Option Strict Off
Imports System.Reflection
Public Class Form1

添加一新按钮

Private Sub btnReflection_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnReflection.Click
        Dim obj As Object '使用后期绑定
        '把dll变量声明为Reflection.Assembly类型,用来存储一个对Objects程序集
        '(通过代码动态加载)的引用。这里并不是通过Project Add Reference菜单项添加一个对该程序集的引用,
        '而是在运行时动态使用它。
        Dim dll As Assembly
        dll = Assembly.LoadFrom("K:\VB练习\Visual Basic 2010 高级教程\005OOExample\Object\bin\Debug\Object.dll")
        obj = dll.CreateInstance("Object.External")
        MsgBox(obj.distanceto(3, 4))
    End Sub

4.使用反射和多接口来实现多态性

反射和多接口可以一起使用。使用一个在主应用程序和外部程序集之间通用的接口,可以将这两个概念组合起来,也可以使
用反射在运行时动态地加载外部程序集。

5.使用继承实现多态性

父类:

Public MustInherit Class Parent
    Public MustOverride Function DistanceTo(ByVal x As Single, ByVal y As Single) As Single
End Class
子类继承:

Public Class Encapsulation
    Inherits Parent
    Implements IShared

重写方法:

Public Overrides Function DistanceTo(ByVal x As Single, ByVal y As Single) As Single Implements IShared.CalculateDistance
        Return x + y
End Function

函数名不同,但签名相同

VB 2010 (20)多态性相关推荐

  1. VB 2010 (11)创建类

    对象仅仅是特定模板(即类)的实例.类包含的代码定义了其对象的行为,还定义了包含对象专用数据的实例变量. 使用Class关键字可以创建类,类包含了组成类的变量.方法.属性和事件的定义(声明)和实现(代码 ...

  2. VB 2010 (10)数据类型转换

    在开发软件时,常常需要提取一个数值,把它转换为一个字符串,显示在文本框中.另外,还需要从文本框中提取输入信息,把它转换为一个数值.这些转换操作可以用两种方式完成:隐式转换和显式转换. 隐式转换可以利用 ...

  3. VB 2010 (52)Connection对象

    可以使用Connection对象连接一个指定的数据源.要连接Microsoft SQL Server 7.O和其后续版本,需要使用SQL Server.NET数据提供程序的SqIConnection对 ...

  4. VB 2010 (6) date datetime dateandtime

    Date 数据类型 (Visual Basic) https://docs.microsoft.com/zh-cn/dotnet/visual-basic/language-reference/dat ...

  5. VB 2010 (73)DialogResult属性

    Form.DialogResult 属性 https://docs.microsoft.com/zh-cn/dotnet/api/system.windows.forms.form.dialogres ...

  6. 电脑防病毒软件主动防御测试,2010年十款最佳杀毒软件测试

    2010年十款最佳杀毒软件测试 2010-07-28 17:20:48  来源:华军资讯 扫码可以: 1.在手机上浏览 2.分享给微信好友或朋友圈 摘要: 全球各大安全厂商分别推出了反病毒解决方案,其 ...

  7. 转录组的技术应用 (生物学、医学、农学中的应用)

    转录组的技术应用 序言 转录组技术在生物学.医学.农学中的应用 随着第二代测序技术的迅猛发展,其高通量.快速.低成本的特点成为越来越多的生物学研究者在解决生物学问题时的首选,尤其在转录组测序方面更显示 ...

  8. web test LoadRunner error list / error log

    http://bbs.51testing.com/thread-8644-1-1.html sckOutOfMemory 7 内存不足 sckInvalidPropertyValue 380 属性值不 ...

  9. 干货分享 | 基因调控新思路之超级增强子

    超级增强子的先驱者Richard A. Young与JQ1/iBET研发者Bradner J.E.这两位科学家曾预言超级增强子具有广阔的研发前景和价值,必将成为下一个药物研发的黄金靶点,有望开发一种精 ...

最新文章

  1. JAVA设计模式初探之——装饰者模式
  2. Java开发面试技巧,Hive-JDBC操作
  3. python加密执行_如何在Python中执行PGP(生成密钥,加密/解密)
  4. aop拦截mybatis执行sql_Java进阶架构之开源框架面试题系列:Spring+SpringMVC+MyBatis
  5. 四舍五入算法 php,3种PHP实现四舍五入的方法
  6. 背包问题(nyoj106)
  7. 网络爬虫+数据可视化
  8. SC/Tetra.v7-ISO 1DVD(流体模拟分析)
  9. 基于实现韦尔奇·鲍威尔法对图进行着色
  10. 计算机软件测试方法的分析,计算机软件测试方法的分析.doc
  11. android自定义壁纸制作,如何为Android制作自己的自定义壁纸 | MOS86
  12. linux切换任务栏快捷键,ubuntu常用命令及快捷键整理
  13. 分享 | 视觉无监督学习新范式:MAE
  14. html入门、结构、标签、列表、表格
  15. maven仓库的优先级,profile的优先级
  16. Python 部分环境资源配置【包括 Anaconda、cuda、pytorch 安装】
  17. 不要高估你和任何一个人的关系
  18. 计算机考研 保研夏令营 经验 经历 经验总结
  19. java,证件类型枚举
  20. Android实现下载图片并保存到SD卡中

热门文章

  1. Jenkins 流水线自动化部署 Go 项目
  2. 机顶盒 img打包工具_安卓网络机顶盒如何通过KODI看m3u8电视直播
  3. Unity中使用ProtoBuf-保姆式教程
  4. wordpress仿站笔记
  5. 数字化经济带领各行各业迎来碧海蓝天
  6. marquee参数详解
  7. A095_day01_微信小程序入门与组件
  8. 怡丰机器人上市_京东物流要上市!外媒:初步讨论IPO 或筹资100亿美元
  9. 在线编辑php文件的代码
  10. 开通微信零钱通的方法微信免手续费提现