Programmazione orientata agli oggetti (Visual Basic)Object-oriented programming (Visual Basic)

Visual Basic fornisce supporto completo per la programmazione orientata agli oggetti inclusi incapsulamento, ereditarietà e polimorfismo.Visual Basic provides full support for object-oriented programming including encapsulation, inheritance, and polymorphism.

L'incapsulamento indica che un gruppo di proprietà, metodi e altri membri correlati vengono considerati come una singola unità o un singolo oggetto.Encapsulation means that a group of related properties, methods, and other members are treated as a single unit or object.

L'ereditarietà indica la capacità di creare nuove classi sulla base di una classe esistente.Inheritance describes the ability to create new classes based on an existing class.

Il polimorfismo indica la capacità di usare più classi in modo intercambiabile, anche se in ognuna di esse le stesse proprietà o gli stessi metodi sono implementati in modi diversi.Polymorphism means that you can have multiple classes that can be used interchangeably, even though each class implements the same properties or methods in different ways.

In questa sezione vengono descritti i concetti seguenti:This section describes the following concepts:

Classi e oggettiClasses and objects

I termini classe e oggetto vengono talvolta usati in modo intercambiabile. Di fatto, però, le classi descrivono il tipo degli oggetti, mentre gli oggetti sono istanze utilizzabili delle classi.The terms class and object are sometimes used interchangeably, but in fact, classes describe the type of objects, while objects are usable instances of classes. L'atto di creare un oggetto viene pertanto chiamato creazione di istanze.So, the act of creating an object is called instantiation. Rifacendoci all'analogia precedente, la classe corrisponde al progetto iniziale e l'oggetto all'edificio realizzato in base a tale progetto.Using the blueprint analogy, a class is a blueprint, and an object is a building made from that blueprint.

Per definire una classe:To define a class:

Class SampleClass
End Class

Visual Basic fornisce anche una versione ridotta di classi denominate strutture che sono utili quando è necessario creare una matrice di oggetti di grandi dimensioni e scopo non si desidera usare troppa memoria adatto.Visual Basic also provides a light version of classes called structures that are useful when you need to create large array of objects and do not want to consume too much memory for that.

Per definire una struttura:To define a structure:

Structure SampleStructure
End Structure

Per altre informazioni, vedere:For more information, see:

Membri della classeClass members

Ogni classe può avere membri di classe diversi che includono proprietà che descrivono i dati della classe, i metodi che definiscono il comportamento della classe e gli eventi che offrono la comunicazione tra classi e oggetti diversi.Each class can have different class members that include properties that describe class data, methods that define class behavior, and events that provide communication between different classes and objects.

Proprietà e campiProperties and fields

I campi e le proprietà rappresentano le informazioni contenute in un oggetto.Fields and properties represent information that an object contains. I campi sono simili a variabili in quanto possono essere letti o impostati direttamente.Fields are like variables because they can be read or set directly.

Per definire un campo:To define a field:

Class SampleClass
    Public SampleField As String
End Class

Le proprietà dispongono di routine Get e Set, che forniscono un maggiore controllo sul modo in cui i valori vengono impostati o restituiti.Properties have get and set procedures, which provide more control on how values are set or returned.

Visual Basic consente di creare un campo privato per archiviare il valore della proprietà o usare le cosiddette proprietà implementate automaticamente che creano automaticamente questo campo in background e forniscono la logica di base per le routine della proprietà.Visual Basic allows you either to create a private field for storing the property value or use so-called auto-implemented properties that create this field automatically behind the scenes and provide the basic logic for the property procedures.

Per definire una proprietà implementata automaticamente:To define an auto-implemented property:

Class SampleClass
    Public Property SampleProperty as String
End Class

Se è necessario eseguire alcune operazioni aggiuntive per la lettura e la scrittura del valore della proprietà, definire un campo per archiviare il valore della proprietà e fornire la logica di base per archiviarlo e recuperarlo:If you need to perform some additional operations for reading and writing the property value, define a field for storing the property value and provide the basic logic for storing and retrieving it:

Class SampleClass
    Private m_Sample As String
    Public Property Sample() As String
        Get
            ' Return the value stored in the field.
            Return m_Sample
        End Get
        Set(ByVal Value As String)
            ' Store the value in the field.
            m_Sample = Value
        End Set
    End Property
End Class

La maggior parte delle proprietà dispone di metodi o di routine per impostare e ottenere il valore della proprietà.Most properties have methods or procedures to both set and get the property value. È possibile, tuttavia, creare proprietà di sola lettura o di sola scrittura per impedirne la modifica o la lettura.However, you can create read-only or write-only properties to restrict them from being modified or read. In Visual Basic è possibile utilizzare le parole chiave ReadOnly e WriteOnly.In Visual Basic you can use ReadOnly and WriteOnly keywords. Tuttavia, le proprietà implementate automaticamente non possono essere di sola lettura o di sola scrittura.However, auto-implemented properties cannot be read-only or write-only.

Per altre informazioni, vedere:For more information, see:

MetodiMethods

Un metodo è un'azione che può essere eseguita da un oggetto.A method is an action that an object can perform.

Nota

In Visual Basic, è possibile creare un metodo in due modi: se il metodo non restituisce un valore, viene utilizzata l'istruzione Sub, se invece un metodo restituisce un valore, viene utilizzata l'istruzione Function.In Visual Basic, there are two ways to create a method: the Sub statement is used if the method does not return a value; the Function statement is used if a method returns a value.

Per definire un metodo di una classe:To define a method of a class:

Class SampleClass
    Public Function SampleFunc(ByVal SampleParam As String)
        ' Add code here
    End Function
End Class

Una classe può disporre di diverse implementazioni, o overload, dello stesso metodo che differiscono per il numero di parametri o per i tipi di parametro.A class can have several implementations, or overloads, of the same method that differ in the number of parameters or parameter types.

Per essere in rapporto di overload con un metodo:To overload a method:

Overloads Sub Display(ByVal theChar As Char)
    ' Add code that displays Char data.
End Sub
Overloads Sub Display(ByVal theInteger As Integer)
    ' Add code that displays Integer data.
End Sub

Nella maggior parte dei casi si dichiara un metodo all'interno di una definizione della classe.In most cases you declare a method within a class definition. Tuttavia, Visual Basic supporta anche metodi di estensione che consentono di aggiungere metodi a una classe esistente di fuori della definizione effettiva della classe.However, Visual Basic also supports extension methods that allow you to add methods to an existing class outside the actual definition of the class.

Per altre informazioni, vedere:For more information, see:

CostruttoriConstructors

I costruttori sono metodi di classe che vengono eseguiti automaticamente durante la creazione di un oggetto di un tipo specifico.Constructors are class methods that are executed automatically when an object of a given type is created. I costruttori in genere inizializzano i membri dati del nuovo oggetto.Constructors usually initialize the data members of the new object. Un costruttore può essere eseguito solo una volta alla creazione di una classe.A constructor can run only once when a class is created. Inoltre, il codice nel costruttore viene sempre eseguito prima di qualsiasi altro codice in una classe.Furthermore, the code in the constructor always runs before any other code in a class. Tuttavia, è possibile creare più overload del costruttore esattamente come per qualsiasi altro metodo.However, you can create multiple constructor overloads in the same way as for any other method.

Per definire un costruttore per una classe:To define a constructor for a class:

Class SampleClass
    Sub New(ByVal s As String)
        // Add code here.
    End Sub
End Class

Per altre informazioni, vedere: Durata degli oggetti: Come gli oggetti vengono creati e distrutti.For more information, see: Object Lifetime: How Objects Are Created and Destroyed.

DistruttoriDestructors

I distruttori sono utilizzati per distruggere istanze di classi.Destructors are used to destruct instances of classes. In .NET Framework, il Garbage Collector gestisce l'allocazione e il rilascio di memoria per gli oggetti gestiti di un'applicazione.In the .NET Framework, the garbage collector automatically manages the allocation and release of memory for the managed objects in your application. Potrebbero, tuttavia, essere necessari distruttori per pulire eventuali risorse non gestite create dall'applicazione.However, you may still need destructors to clean up any unmanaged resources that your application creates. Può esistere un solo distruttore per classe.There can be only one destructor for a class.

Per altre informazioni sui distruttori e sull'operazione di Garbage Collection in .NET Framework, vedere Garbage Collection.For more information about destructors and garbage collection in the .NET Framework, see Garbage Collection.

EventiEvents

Tramite gli eventi una classe o un oggetto sono in grado di segnalare ad altre classi o oggetti una situazione di interesse.Events enable a class or object to notify other classes or objects when something of interest occurs. La classe che invia o genera l'evento è chiamata editore e le classi che ricevono o gestiscono l'evento sono chiamate sottoscrittori.The class that sends (or raises) the event is called the publisher and the classes that receive (or handle) the event are called subscribers. Per altre informazioni sugli eventi e sulla loro generazione e gestione, vedere Eventi.For more information about events, how they are raised and handled, see Events.

Classi annidateNested classes

Una classe definita all'interno di un'altra classe è denominata annidata.A class defined within another class is called nested. Per impostazione predefinita, la classe annidata è privata.By default, the nested class is private.

Class Container
    Class Nested
    ' Add code here.
    End Class
End Class

Per creare un'istanza della classe annidata, utilizzare il nome della classe dei contenitori seguita dal punto, quindi dal nome della classe annidata:To create an instance of the nested class, use the name of the container class followed by the dot and then followed by the name of the nested class:

Dim nestedInstance As Container.Nested = New Container.Nested()

Modificatori di accesso e livelli di accessoAccess modifiers and access levels

Tutte le classi e i membri della classe possono specificare il livello di accesso offerto alle altre classi usando i modificatori di accesso.All classes and class members can specify what access level they provide to other classes by using access modifiers.

Sono disponibili i seguenti modificatori di accesso:The following access modifiers are available:

Modificatore di Visual BasicVisual Basic Modifier DefinizioneDefinition
PublicPublic Il tipo o il membro è accessibile da altro codice nello stesso assembly o in un altro assembly che vi fa riferimento.The type or member can be accessed by any other code in the same assembly or another assembly that references it.
PrivatePrivate Il tipo o il membro è accessibile solo dal codice nella stessa classe.The type or member can only be accessed by code in the same class.
ProtectedProtected Il tipo o il membro è accessibile solo dal codice nella stessa classe o in una classe derivata.The type or member can only be accessed by code in the same class or in a derived class.
FriendFriend Il tipo o il membro è accessibile dal codice nello stesso assembly ma non da un altro assembly.The type or member can be accessed by any code in the same assembly, but not from another assembly.
Protected Friend Il tipo o il membro è accessibile dal codice nello stesso assembly o da una classe derivata in un altro assembly.The type or member can be accessed by any code in the same assembly, or by any derived class in another assembly.

Per altre informazioni, vedere Access levels in Visual Basic.For more information, see Access levels in Visual Basic.

Istanze di classiInstantiating classes

Per creare un oggetto, è necessario creare un'istanza di una classe.To create an object, you need to instantiate a class, or create a class instance.

Dim sampleObject as New SampleClass()

Dopo avere creato un'istanza di una classe, è possibile assegnare i valori alle proprietà e ai campi dell'istanza e richiamare i metodi della classe.After instantiating a class, you can assign values to the instance's properties and fields and invoke class methods.

' Set a property value.
sampleObject.SampleProperty = "Sample String"
' Call a method.
sampleObject.SampleMethod()

Per assegnare i valori alle proprietà durante il processo di creazione dell'istanza della classe, utilizzare gli inizializzatori di oggetto:To assign values to properties during the class instantiation process, use object initializers:

Dim sampleObject = New SampleClass With
    {.FirstProperty = "A", .SecondProperty = "B"}

Per altre informazioni, vedere:For more information, see:

I membri e classi condiviseShared classes and members

Un membro condiviso della classe è una proprietà, routine o campo condiviso da tutte le istanze di una classe.A shared member of the class is a property, procedure, or field that is shared by all instances of a class.

Per definire un membro condiviso:To define a shared member:

Class SampleClass
    Public Shared SampleString As String = "Sample String"
End Class

Per accedere al membro condiviso, usare il nome della classe senza creare un oggetto di questa classe:To access the shared member, use the name of the class without creating an object of this class:

MsgBox(SampleClass.SampleString)

I moduli condivisi in Visual Basic sono condivisi solo i membri e non è possibile creare un'istanza.Shared modules in Visual Basic have shared members only and cannot be instantiated. Non è possibile accedere anche membri condivisi non condivisi di proprietà, campi o metodiShared members also cannot access non-shared properties, fields or methods

Per altre informazioni, vedere:For more information, see:

Tipi anonimiAnonymous types

I tipi anonimi consentono di creare oggetti senza scrivere una definizione della classe per il tipo di dati.Anonymous types enable you to create objects without writing a class definition for the data type. La classe viene generata direttamente dal compilatore.Instead, the compiler generates a class for you. La classe non ha un nome utilizzabile e contiene le proprietà specificate nella dichiarazione dell'oggetto.The class has no usable name and contains the properties you specify in declaring the object.

Per creare un'istanza di un tipo anonimo:To create an instance of an anonymous type:

' sampleObject is an instance of a simple anonymous type.
Dim sampleObject =
    New With {Key .FirstProperty = "A", .SecondProperty = "B"}

Per altre informazioni, vedere: Tipi anonimi.For more information, see: Anonymous Types.

EreditarietàInheritance

L'ereditarietà permette di creare una nuova classe che riutilizza, estende e modifica il comportamento definito in un'altra classe.Inheritance enables you to create a new class that reuses, extends, and modifies the behavior that is defined in another class. La classe i cui membri vengono ereditati è denominata classe base, mentre la classe che eredita i membri è denominata classe derivata.The class whose members are inherited is called the base class, and the class that inherits those members is called the derived class. Tuttavia, tutte le classi in Visual Basic ereditano in modo implicito dal Object classe che supporta la gerarchia di classi .NET e fornisce servizi di basso livello a tutte le classi.However, all classes in Visual Basic implicitly inherit from the Object class that supports .NET class hierarchy and provides low-level services to all classes.

Nota

Visual Basic non supporta l'ereditarietà multipla.Visual Basic doesn't support multiple inheritance. Vale a dire, è possibile specificare una sola classe base per una classe derivata.That is, you can specify only one base class for a derived class.

Per ereditare da una classe base:To inherit from a base class:

Class DerivedClass
    Inherits BaseClass
End Class

Per impostazione predefinita, tutte le classi possono essere ereditate.By default all classes can be inherited. Tuttavia, è possibile specificare se una classe non deve essere utilizzata come classe base oppure creare una classe utilizzabile solo come classe base.However, you can specify whether a class must not be used as a base class, or create a class that can be used as a base class only.

Per specificare che una classe non può essere utilizzata come classe base:To specify that a class cannot be used as a base class:

NotInheritable Class SampleClass
End Class

Per specificare che una classe può essere utilizzata solo come classe base e che non è possibile crearne un'istanza:To specify that a class can be used as a base class only and cannot be instantiated:

MustInherit Class BaseClass
End Class

Per altre informazioni, vedere:For more information, see:

Override di membriOverriding members

Per impostazione predefinita, in una classe derivata vengono ereditati tutti i membri della classe base relativa.By default, a derived class inherits all members from its base class. Se si desidera modificare il comportamento del membro ereditato, è necessario eseguirne l'override.If you want to change the behavior of the inherited member, you need to override it. È possibile definire una nuova implementazione del metodo, della proprietà o dell'evento nella classe derivata.That is, you can define a new implementation of the method, property or event in the derived class.

I seguenti modificatori consentono di controllare le modalità di override di proprietà e metodi:The following modifiers are used to control how properties and methods are overridden:

Modificatore di Visual BasicVisual Basic Modifier DefinizioneDefinition
OverridableOverridable Consente a un membro della classe di essere sottoposto a override in una classe derivata.Allows a class member to be overridden in a derived class.
OverridesOverrides Esegue l'override di un membro virtuale (sottoponibile a override) definito nella classe base.Overrides a virtual (overridable) member defined in the base class.
NotOverridableNotOverridable Consente di impedire l'override di un membro in una classe che eredita.Prevents a member from being overridden in an inheriting class.
MustOverrideMustOverride Richiede che un membro della classe venga sottoposto a override nella classe derivata.Requires that a class member to be overridden in the derived class.
ShadowsShadows Nasconde un membro ereditato da una classe base.Hides a member inherited from a base class

InterfacceInterfaces

Le interfacce, come le classi, consentono di definire un insieme di proprietà, metodi ed eventi.Interfaces, like classes, define a set of properties, methods, and events. A differenza delle classi, però, le interfacce non forniscono l'implementazione.But unlike classes, interfaces do not provide implementation. Esse sono infatti implementate dalle classi e definite come entità distinte da queste.They are implemented by classes, and defined as separate entities from classes. Un'interfaccia rappresenta un contratto, in quanto è necessario che una classe che implementa un'interfaccia implementi ogni aspetto esattamente come è stato definito.An interface represents a contract, in that a class that implements an interface must implement every aspect of that interface exactly as it is defined.

Per definire un'interfaccia:To define an interface:

Public Interface ISampleInterface
    Sub DoSomething()
End Interface

Per implementare un'interfaccia in una classe:To implement an interface in a class:

Class SampleClass
    Implements ISampleInterface
    Sub DoSomething
        ' Method implementation.
    End Sub
End Class

Per altre informazioni, vedere:For more information, see:

GenericsGenerics

Possono includere classi, strutture, interfacce e metodi in .NET parametri di tipo che definiscono i tipi di oggetti che possono archiviare o usare.Classes, structures, interfaces and methods in .NET can include type parameters that define types of objects that they can store or use. L'esempio più comune di generics è una raccolta, dove è possibile specificare il tipo di oggetti da archiviare in una raccolta.The most common example of generics is a collection, where you can specify the type of objects to be stored in a collection.

Per definire una classe generica:To define a generic class:

Class SampleGeneric(Of T)
    Public Field As T
End Class

Per creare un'istanza di una classe generica:To create an instance of a generic class:

Dim sampleObject As New SampleGeneric(Of String)
sampleObject.Field = "Sample string"

Per altre informazioni, vedere:For more information, see:

DelegatiDelegates

Un delegato è un tipo che definisce una firma di metodo e può offrire un riferimento a qualsiasi metodo con una firma compatibile.A delegate is a type that defines a method signature, and can provide a reference to any method with a compatible signature. Tramite il delegato è possibile invocare (o chiamare) il metodo.You can invoke (or call) the method through the delegate. I delegati vengono utilizzati per passare metodi come argomenti ad altri metodi.Delegates are used to pass methods as arguments to other methods.

Nota

I gestori di evento non sono altro che metodi richiamati tramite delegati.Event handlers are nothing more than methods that are invoked through delegates. Per altre informazioni sull'uso dei delegati nella gestione degli eventi, vedere Eventi.For more information about using delegates in event handling, see Events.

Per creare un delegato:To create a delegate:

Delegate Sub SampleDelegate(ByVal str As String)

Per creare un riferimento a un metodo che corrisponde alla firma specificata dal delegato:To create a reference to a method that matches the signature specified by the delegate:

Class SampleClass
    ' Method that matches the SampleDelegate signature.
    Sub SampleSub(ByVal str As String)
        ' Add code here.
    End Sub
    ' Method that instantiates the delegate.
    Sub SampleDelegateSub()
        Dim sd As SampleDelegate = AddressOf SampleSub
        sd("Sample string")
    End Sub
End Class

Per altre informazioni, vedere:For more information, see:

Vedere ancheSee also