加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

接口行为在VB.Net中是不同的

发布时间:2020-12-17 00:04:05 所属栏目:大数据 来源:网络整理
导读:接口在Vb.Net中的行为不同.下面是一个示例代码片段,其中IStudent接口有一个方法SayHello,它由类Student实现.默认情况下,SayHello的Access修饰符应为Public.通过将Access修饰符更改为Private不会破坏现有代码,仍然可以使用下面的代码访问此私有方法 Dim stdnt
接口在Vb.Net中的行为不同.下面是一个示例代码片段,其中IStudent接口有一个方法SayHello,它由类Student实现.默认情况下,SayHello的Access修饰符应为Public.通过将Access修饰符更改为Private不会破坏现有代码,仍然可以使用下面的代码访问此私有方法
Dim stdnt As IStudent = New Student
stdnt.SayHello()

Access修饰符确定类中成员的范围,更多的私有成员只能从存在的类中访问.但是这里的Access Modifier理论,Encapsulation被打破了.

>为什么.net以这种方式设计?
> Access修饰符和封装的概念是否真的被打破了?
> .net框架如何在内部处理这种情况?

提前致谢

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
原始海报通过TheBugGuys@Coverity.com向我提交了这个问题;我的回答在这里:

https://communities.coverity.com/blogs/development-testing-blog/2013/10/09/oct-9-posting-interface-behaves-differently-in-visual-basic

简要总结一下:

Why was .NET designed in this way?

这个问题不可能模糊不清.

Is encapsulation broken by explicit implementation in C# and VB?

不.该方法的隐私限制了方法名称的可访问域,而不是谁可以调用该方法.如果该类的作者选择通过某种机制调用私有方法,而不是通过名称查找,那么这就是他们的选择.除非通过私有反射等技术破解封装,否则第三方无法为它们做出选择.

How is this feature implemented in .NET?

有一个特殊的元数据表用于显式接口实现.当试图找出哪种类(或结构)方法与哪种接口方法相关时,CLR首先参考它.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读