接口在Vb.Net中的行为不同.下面是一个示例代码片段,其中IStudentinterface具有SayHello由类实现的方法Student.默认情况下,Access修饰符SayHello应为Public.通过将Access修饰符更改Private为不破坏现有代码,我仍然可以使用下面的代码访问此私有方法
Dim stdnt As IStudent = New Student
stdnt.SayHello()
Run Code Online (Sandbox Code Playgroud)
Access修饰符确定类中成员的范围,更多的私有成员只能从存在的类中访问.但是这里的Access Modifier理论,Encapsulation被打破了.
提前致谢
Module Module1
Sub Main()
Dim stdnt As IStudent = New Student
stdnt.Name = "vimal"
stdnt.SayHello()
End Sub
End Module
Public Interface IStudent
Property Name As String
Sub SayHello()
End Interface
Public Class Student
Implements IStudent
Private Property Name As String Implements IStudent.Name
Private Sub SayHello() Implements IStudent.SayHello
Console.WriteLine("Say Hello!")
End Sub
End Class
Run Code Online (Sandbox Code Playgroud)
原发帖者通过 TheBugGuys@Coverity.com 向我提交了这个问题;我的答案在这里:
简单总结一下:
.NET 为什么要这样设计?
这个问题不可能含糊不清。
C# 和 VB 中的显式实现是否会破坏封装?
不可以。方法的隐私限制的是方法名称的可访问域,而不是限制谁可以调用该方法。如果类的作者选择使私有方法可以通过某种机制调用,而不是通过名称查找,那是他们的选择。第三方无法为它们做出选择,除非通过私有反射等技术,这些技术确实会破坏封装。
这个功能在.NET 中是如何实现的?
对于显式接口实现有一个特殊的元数据表。当 CLR 尝试找出哪个类(或结构)方法与哪个接口方法关联时,首先会查阅它。
| 归档时间: |
|
| 查看次数: |
943 次 |
| 最近记录: |