asp.net – 多态 – 覆盖和重载
为什么重载称为编译时多态性并覆盖调用的运行时多态?例如,看看下面的代码:
Public Class Animal Public Overridable Overloads Sub Eat() MsgBox("Animal Eat no arguement") End Sub Public Overridable Sub Drink() MsgBox("Animal drink arguement") End Sub End Class Public Class Horse Inherits Animal Public Overloads Overrides Sub Eat() MsgBox("Horse Eat no arguement") End Sub Public Overloads Sub Eat(ByVal food As String) MsgBox("Horse Eat food arguement") End Sub Public Overloads Overrides Sub Drink() MsgBox("Animal drink arguement") End Sub End Class Public Class Form1 Private Sub Form2_Load(ByVal sender As Object,ByVal e As System.EventArgs) Handles Me.Load Dim a1 As New Animal Dim a2 As Animal a2 = New Horse a1.Eat() a2.Eat("Fruit") 'line 6 End Sub End Class 第6行将导致编译时错误,因为程序代表.但是,如果我向动物类添加一个Eat(String),那么它将编译.这背后的原因是什么? 以下帖子中的答案还说:“Overloads关键字是可选的,但如果您将其用于一种方法,则必须将其用于该方法的所有重载:”https://stackoverflow.com/questions/1173257/overloads -keyword式-VB网.如果有问题的函数也覆盖,我并不总是发现这种情况.是这样的吗? 我正在寻找一个使用多态性和接口的大型程序.我提供了上面的课程作为例子用于说明目的. 解决方法
这是因为Animal类型暴露的签名没有带字符串的Eat版本,直到您修改了基类(Animal)签名.多态性允许您将马称为动物类型,但仅通过动物的签名(除非您将其转换为马类型).因此,如果您有另一种类型的Cat,它继承自Animal,但没有吃(“”),如果VB允许您提到的内容,则会导致编译器错误.
我认为覆盖提供了你找到的解决方法,但不是100%肯定它.我个人根本不使用Overload来节省打字,因为C#不使用它. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net – 是否有可能欺骗或重用VIEWSTATE或检测它是否受到
- asp.net – asp服务器错误’无法加载文件或程序集’,但程序
- asp.net-mvc – 限制每个动作的HTTP动词
- asp.net – 如何使用AntiXss Library正确清理内容?
- asp.net-mvc – ASP.NET MVC – 单元测试过度杀毒? (TDD)
- 如何将数组从Asp.net服务器端传递到客户端的Javascript函数
- ASP.NET:如何更快地加载页面
- asp.net – 由Chrome和FF破坏的会话变量
- asp.net-mvc – 为什么DropDownListFor不能识别编辑器模板中
- asp.net-mvc – 在ASP.NET MVC中定制授权
- asp.net – 如何在volusion中编辑产品详细信息页
- asp.net-mvc – 如果用户拥有Auth Cookie,则可以
- 什么是ASP.NET的最佳部署策略
- asp.net-mvc – Fluent Validation不会在第一次验
- asp.net-mvc – Web部署由于文件正在使用而失败
- 部署 – kestrel-hellomvc.service:步骤USER产生
- asp.net-mvc-3 – 使用Magical Unicorn的ASP.NET
- asp.net-mvc-5 – 带有LDAP身份验证的OWIN
- asp.net-mvc – 何时使用RedirectToAction和哪里
- 最好的asp.net日历/日程安排组件?