Structures and classes differ in the following particulars:
Structures are value types; classes are reference types.
Structures use stack allocation; classes use heap allocation.
All structure members are Public by default; class variables and constants are Private by default, while other class members are Public by default. This behavior for class members provides compatibility with the Visual Basic 6.0 system of defaults.
A structure must have at least one nonshared variable or event member; a class can be completely empty.
Structure members cannot be declared as Protected; class members can.
A structure procedure can handle events only if it is a Shared Sub procedure, and only by means of the AddHandler statement; any class procedure can handle events, using either the Handles keyword or the AddHandler statement.
Structure variable declarations cannot specify initializers, the New keyword, or initial sizes for arrays; class variable declarations can.
Structures implicitly inherit from the ValueType class and cannot inherit from any other type; classes can inherit from any class or classes other than ValueType.
Structures are not inheritable; classes are.
Structures are never terminated, so the common language runtime (CLR) never calls the Finalize method on any structure; classes are terminated by the garbage collector, which calls Finalize on a class when it detects there are no active references remaining.
A structure does not require a constructor; a class does.
Structures can have nonshared constructors only if they take parameters; classes can have them with or without parameters.
Every structure has an implicit public constructor without parameters. This constructor initializes all the structure's data members to their default values. You cannot redefine this behavior.