封装是面向对象编程的支柱之一,它通过访问修饰符如Private和Protected来实现。在经典版本的Visual Basic中,仅支持最简单的可见性级别,但随着VB.NET的出现,出现了类似于C#的现代机制。
主要任务是将内部实现细节与外部代码隔离,包括其他程序部分。典型错误与不正确的访问级别、尝试访问超出许可可见性范围的字段和方法或对Protected和它与其他修饰符组合的行为的误解有关。
支持以下修饰符:
Private — 仅在当前类/模块内可访问Protected — 在当前类及所有继承者中可访问(即使在其他程序集)Friend — 在同一程序集内可访问Protected Friend — 在继承者或同一程序集内可访问代码示例:
Public Class BaseClass Private Sub PrivateMethod() Console.WriteLine("PrivateMethod") End Sub Protected Sub ProtectedMethod() Console.WriteLine("ProtectedMethod") End Sub Friend Sub FriendMethod() Console.WriteLine("FriendMethod") End Sub Protected Friend Sub ProtectedFriendMethod() Console.WriteLine("ProtectedFriendMethod") End Sub End Class Public Class DerivedClass Inherits BaseClass Public Sub AccessMethods() 'PrivateMethod() '编译错误 ProtectedMethod() '可以 FriendMethod() '可以,如果在同一程序集 ProtectedFriendMethod() '可以 End Sub End Class
关键特点:
Private修饰符将可见性限制在类的范围内Protected在所有继承类中有效,无论在任何程序集Protected Friend结合了两者规则可以通过派生类访问private字段吗?
不可以,private成员始终只能在声明它们的类内访问。派生类即使通过反射也无法访问private成员(如果不使用非常规方式)。
Protected与Protected Friend有什么区别?
Protected — 仅在类及其后代中可访问,即使在其他程序集;Protected Friend — 可来自派生类或同一程序集内的任何代码。
可以通过基类实例访问类的protected方法吗?
不可以,即使protected方法在继承类中是公开的,也不能从外部代码通过基类实例调用。Protected方法仅在类本身或其继承中可用。
开发者为了简化测试,将内部字段设置为public,以便可以直接从外部代码或单元测试中访问。随着时间的推移,其他调用开始使用这些字段,依赖于它们的内部结构。
优点:
缺点:
明确应用访问修饰符,所有字段默认为private,外部访问仅通过属性和公共方法。测试需求使用接口或同一程序集中的朋友类。
优点:
缺点: