Share via


Access Levels in Visual BasicĀ 

The access level of a declared element is the extent of the ability to access it, that is, what code has permission to read it or write to it. This is determined not only by how you declare the element itself, but also by the access level of the element's container. Code that cannot access a containing element cannot access any of its contained elements, even those declared as Public. For example, a Public variable in a Private structure is accessible from inside the class containing the structure, but not from outside that class.

Public

The Public (Visual Basic) keyword in the declaration statement specifies that the elements are accessible from code anywhere within the same project, from other projects that reference the project, and from any assembly built from the project. The following code shows a sample Public declaration.

Public Class classForEverybody

You can use Public only at module, interface, or namespace level. This means you can declare a public element at the level of a source file or namespace, or inside an interface, module, class, or structure, but not within a procedure.

Protected

The Protected (Visual Basic) keyword in the declaration statement specifies that the elements are accessible only from within the same class, or from a class derived from this class. The following code shows a sample Protected declaration.

Protected Class classForMyHeirs

You can use Protected only at class level, and only when declaring a member of a class. This means you can declare a protected element in a class, but not at the level of a source file or namespace, or inside an interface, module, structure, or procedure.

Friend

The Friend (Visual Basic) keyword in the declaration statement specifies that the elements are accessible from within the same assembly, but not from outside the assembly. The following code shows a sample Friend declaration.

Friend stringForThisProject As String

You can use Friend only at module, interface, or namespace level. This means you can declare a friend element at the level of a source file or namespace, or inside an interface, module, class, or structure, but not within a procedure.

Protected Friend

The Protected and Friend keywords together in the declaration statement specify that the elements are accessible either from derived classes or from within the same assembly, or both. The following code shows a sample Protected Friend declaration.

Protected Friend stringForProjectAndHeirs As String

You can use Protected Friend only at class level, and only when declaring a member of a class. This means you can declare a protected friend element in a class, but not at the level of a source file or namespace, or inside an interface, module, structure, or procedure.

Private

The Private (Visual Basic) keyword in the declaration statement specifies that the elements are accessible only from within the same module, class, or structure. The following code shows a sample Private declaration.

Private numberForMeOnly As Integer

You can use Private only at module level. This means you can declare a private element inside a module, class, or structure, but not at the level of a source file or namespace, inside an interface, or within a procedure.

At the module level, the Dim statement without any access level keywords is equivalent to a Private declaration. However, you might want to use the Private keyword to make your code easier to read and interpret.

Access Modifiers

The keywords that specify access level are called access modifiers. The following table compares the access modifiers.

Access modifier Access level granted Elements you can declare with this access level Declaration context within which you can use this modifier

Public

Unrestricted:

Any code that can see a public element can access it

Interfaces

Modules

Classes

Structures

Structure members

Procedures

Properties

Member variables

Constants

Enumerations

Events

External declarations

Delegates

Source file

Namespace

Interface

Module

Class

Structure

Protected

Derivational:

Code within the class that declares a protected element, or a class derived from it, can access the element

Interfaces

Classes

Structures

Procedures

Properties

Member variables

Constants

Enumerations

Events

External declarations

Delegates

Class

Friend

Assembly:

Code within the assembly that declares a friend element can access it

Interfaces

Modules

Classes

Structures

Structure members

Procedures

Properties

Member variables

Constants

Enumerations

Events

External declarations

Delegates

Source file

Namespace

Interface

Module

Class

Structure

Protected Friend

Union of Protected and Friend:

Code within the same class or the same assembly as a protected friend element, or within any class derived from the element's class, can access it

Interfaces

Classes

Structures

Procedures

Properties

Member variables

Constants

Enumerations

Events

External declarations

Delegates

Class

Private

Declaration context:

Code within the type that declares a private element, including code within contained types, can access the element

Interfaces

Classes

Structures

Structure members

Procedures

Properties

Member variables

Constants

Enumerations

Events

External declarations

Delegates

Module

Class

Structure

See Also

Tasks

How to: Control the Availability of a Variable

Reference

Dim Statement (Visual Basic)
Static (Visual Basic)

Concepts

Declared Element Names
Declared Element Characteristics
Lifetime in Visual Basic
Scope in Visual Basic
Variables in Visual Basic
Variable Declaration in Visual Basic

Other Resources

References to Declared Elements