Generazione dall'utilizzo

La funzionalità di generazione dall'utilizzo consente di utilizzare classi e membri prima di definirli. È possibile generare uno stub per qualsiasi classe, costruttore, metodo, proprietà, enumerazione o campo che si desidera utilizzare ma che non è stato ancora definito. È possibile generare nuovi tipi e membri senza abbandonare la posizione corrente nel codice. In questo modo, è possibile ridurre al minimo le interruzioni del flusso di lavoro.

La funzionalità di generazione dall'utilizzo supporta stili di programmazione quale lo sviluppo con test preliminare.

Utilizzo della funzionalità di generazione dall'utilizzo in C#

Una sottolineatura ondulata viene inserita sotto ciascun identificatore non definito. Se si tiene il puntatore del mouse sull'identificatore, viene visualizzato un messaggio di errore in una descrizione comandi.

Per visualizzare le opzioni appropriate, è possibile utilizzare una delle procedure riportate di seguito:

  • Fare clic sull'identificatore non definito. Una breve sottolineatura compare sotto il carattere all'estrema sinistra. Se si posiziona il puntatore del mouse su tale breve sottolineatura, viene visualizzato uno smart tag (un'icona). Fare clic sullo smart tag.

  • Fare clic sull'identificatore non definito e premere CTRL+. (punto).

  • Fare clic con il pulsante destro del mouse sull'identificatore non definito e scegliere Genera.

Tra le opzioni visualizzate sono incluse le seguenti:

  • Genera stub proprietà

  • Genera stub di campo

  • Genera stub metodo

  • Genera classe

  • Genera nuovo tipo (per una classe, uno struct, un'interfaccia o un'enumerazione)

Utilizzo della funzionalità di generazione dall'utilizzo in Visual Basic

Vengono inserite una sottolineatura ondulata sotto ciascun identificatore non definito e una sottolineatura breve sotto il carattere all'estrema destra. Se si tiene il puntatore del mouse sull'identificatore, viene visualizzato un messaggio di errore in una descrizione comandi.

Per visualizzare le opzioni appropriate, è possibile utilizzare una delle procedure riportate di seguito:

  • Posizionare il puntatore del mouse sull'identificatore non definito. Viene visualizzato uno smart tag (un'icona). Fare clic sullo smart tag.

  • Fare clic sull'identificatore non definito e premere CTRL+. (punto).

  • Nella finestra Elenco errori fare doppio clic sulla riga di errore corrispondente.

Tra le opzioni visualizzate sono incluse le seguenti:

  • Genera stub proprietà

  • Genera stub di campo

  • Genera stub metodo

  • Genera classe

  • Genera interfaccia

  • Genera nuovo tipo (per una classe, struttura, interfaccia, enumerazione, delegato o modulo)

Generazione di uno stub proprietà

Se il codice fa riferimento a una proprietà non definita, fare clic su Genera stub proprietà. Lo stub proprietà viene generato nella classe appropriata. Il tipo restituito della proprietà è determinato dal contesto.

Si supponga, ad esempio, di generare la proprietà InstanceProperty dall'istruzione nel codice riportato di seguito.

Dim cust As New Customer()
Dim city As String = cust.InstanceProperty
Customer cust = new Customer();
string city = cust.InstanceProperty;

Quando si genera la proprietà, nella classe Customer viene creato lo stub seguente.

Property InstanceProperty() As String
public string InstanceProperty { get; set; }

Se una proprietà viene richiamata su un tipo anziché su un'istanza, lo stub generato sarà una proprietà statica (C#) o una proprietà condivisa (Visual Basic).

Si immagini, ad esempio, di generare una proprietà dall'istruzione riportata di seguito (presupponendo che Customer sia un nome di classe).

Dim description As String = Customer.SharedProperty
string description = Customer.StaticProperty;

Quando si genera la proprietà, nella classe Customer viene creato lo stub seguente.

Shared Property SharedProperty As String
public static string StaticProperty { get; set; }

Se una proprietà viene richiamata senza una qualificazione (con riferimento a un membro del tipo corrente), lo stub generato è statico quando la proprietà viene chiamata da un metodo statico. In caso contrario, si tratta di una proprietà dell'istanza.

Si supponga, ad esempio, di generare una proprietà dall'istruzione riportata di seguito.

Dim title As String = UnqualifiedProperty
string title = UnqualifiedProperty;

Quando si genera la proprietà, nella classe corrente viene creato lo stub seguente.

Private Property UnqualifiedProperty() As String
public string UnqualifiedProperty { get; set; }

Generazione di uno stub metodo

Se il codice fa riferimento a un metodo non definito, fare clic su Genera stub metodo. Lo stub metodo viene generato nella classe appropriata.

Il tipo di ogni parametro e il tipo restituito sono determinati dal contesto. Il tipo di oggetto viene utilizzato quando non è possibile dedurre il tipo, come nel caso di tipi anonimi o di variabili locali tipizzate in modo implicito (definite con la parola chiave var).

Il nome di ciascun parametro è derivato dai nomi degli argomenti passati nella chiamata al metodo.

Si supponga, ad esempio, di generare il metodo InstanceMethod dall'istruzione nel codice riportato di seguito.

Dim cust As New Customer()
Dim itemNumber = 3
Dim itemName = "abc"
cust.InstanceMethod(itemNumber, itemName, 4)
Customer cust = new Customer();
int itemNumber = 3;
string itemName = "abc";
cust.InstanceMethod(itemNumber, itemName, 4);

Quando si genera il metodo, nella classe appropriata viene creato lo stub seguente.

Sub InstanceMethod(ByVal itemNumber As Integer, ByVal itemName As String, ByVal p3 As Integer)
    Throw New NotImplementedException
End Sub
internal void InstanceMethod(int itemNumber, string itemName, int p)
{
    throw new NotImplementedException();
}

Se un metodo viene richiamato su un tipo anziché su un'istanza, lo stub generato sarà un metodo statico (C#) o un metodo condiviso (Visual Basic).

Generazione di uno stub metodo per un evento

In Visual Basic, è possibile generare un metodo del gestore eventi per un evento a cui viene fatto riferimento in Istruzione AddHandler o Istruzione RemoveHandler.

Si supponga, ad esempio, di generare il metodo EventHandler da una delle seguenti istruzioni nel codice.

AddHandler obj.Ev_Event, AddressOf EventHandler
RemoveHandler obj.Ev_Event, AddressOf EventHandler

Quando si genera il metodo, nella classe corrente viene creato lo stub seguente.

Private Sub EventHandler()
    Throw New NotImplementedException
End Sub

Generazione di un stub costruttore

Se il codice fa riferimento a un costruttore non definito, fare clic su Genera stub costruttore. Lo stub costruttore viene generato nella classe appropriata. Il tipo di ciascun parametro è determinato dal contesto.

I nomi dei parametri del costruttore vengono esaminati. Se la classe dispone di proprietà con nomi corrispondenti a tali nomi dei parametri, viene fornito il codice nel costruttore per archiviare i valori degli argomenti per quelle proprietà.

Si supponga, ad esempio, di generare un costruttore per la classe Example dall'istruzione nel codice riportato di seguito.

Dim total As Long = 12
Dim exampleTest As New Example(5, total, Date.Now)
long total = 12;
Example exampleTest = new Example(5, total, System.DateTime.Now);

Quando si genera il costruttore, nella classe Example vengono create le variabili private seguenti, se non sono già presenti.

Private _p1 As Integer
Private _total As Long
Private _p3 As Date
private int p;
private long total;
private DateTime dateTime;

Viene creato il seguente stub costruttore.

Sub New(ByVal p1 As Integer, ByVal total As Long, ByVal p3 As Date)
    ' TODO: Complete member initialization 
    _p1 = p1
    _total = total
    _p3 = p3
End Sub
public Example(int p, long total, DateTime dateTime)
{
    // TODO: Complete member initialization
    this.p = p;
    this.total = total;
    this.dateTime = dateTime;
}

È possibile generare più di un costruttore in una classe. I costruttori aggiuntivi possono essere generati se la chiamata al costruttore dispone di un numero diverso di argomenti o di tipi diversi di argomento.

In Visual Basic, è possibile generare un costruttore anche quando si genera una classe. Per ulteriori informazioni, vedere la sezione successiva di questo argomento.

Generazione di una classe

Se il codice fa riferimento a una classe non definita o a un altro tipo, vengono visualizzare le opzioni Genera classe e Genera nuovo tipo.

Se si fa clic su Genera classe, viene generato uno stub di classi vuoto in un nuovo file del progetto. Il nuovo file viene aperto nell'editor del codice, ma non dispone dello stato attivo. Si tratta della modalità più rapida per creare un nuovo tipo di classe con i modificatori di accesso predefiniti in un nuovo file del progetto corrente.

Si supponga, ad esempio, di generare una classe dall'istruzione riportata di seguito.

Dim cust As Customer
Customer cust;

Quando si genera la classe, il nuovo stub di classi riportato di seguito viene creato in un nuovo file del progetto.

Class Customer

End Class
namespace CSharpWindowsApp
{
    class Customer
    {
    }
}

È possibile utilizzare inoltre il comando Genera classe quando una classe di base ereditata non è definita in una definizione di classe.

Generazione di una classe insieme a un costruttore

In Visual Basic, la classe generata includerà un costruttore, se appropriato.

Si supponga, ad esempio, di generare una classe dall'istruzione riportata di seguito.

Dim total = 3
Dim exampleTest As New Example(5, total, Date.Now) With {.Description = "book"}

Quando si genera la classe, il nuovo stub di classi riportato di seguito viene creato in un nuovo file del progetto. Il costruttore viene generato nella classe. Viene creata una proprietà Description per l'inizializzatore di oggetti presente nella clausola With del codice precedente.

Class Example
    Private _p3 As Date
    Private _total As Integer
    Private _p1 As Integer

    Sub New(ByVal p1 As Integer, ByVal total As Integer, ByVal p3 As Date)
        ' TODO: Complete member initialization 
        _p1 = p1
        _total = total
        _p3 = p3
    End Sub

    Property Description As String
End Class

Generazione di nuovi tipi con opzioni aggiuntive

Se il codice fa riferimento a una classe, a un'interfaccia, a un'enumerazione, a uno struct (C#) o a una struttura (Visual Basic) non definita, vengono visualizzate le opzioni per Genera classe e Genera nuovo tipo. Questo passaggio viene mostrato nelle illustrazioni seguenti.

Visual Basic

Menu di scelta rapida Smart tag in Visual Basic

Visual C#

Menu di scelta rapida Smart tag in C#

Fare clic su Genera nuovo tipo per aprire la finestra di dialogo Genera nuovo tipo, che consente di scegliere un livello di accesso, un tipo, un percorso del progetto e un nome di file.

L'opzione Genera nuovo tipo offre flessibilità aggiuntiva quando si genera una classe. Si potrebbe scegliere di inserire la classe in un file esistente o di specificare i modificatori di accesso o di aggiungere il nuovo file a un altro progetto nella soluzione.

Nell'illustrazione seguente viene mostrata la finestra di dialogo Genera nuovo tipo.

Finestra di dialogo Genera nuovo tipo

Finestra di dialogo Genera nuovo tipo

Nella tabella seguente sono mostrate le opzioni disponibili nella finestra di dialogo Genera nuovo tipo.

Opzione

Scelte disponibili per C#

Scelte disponibili per Visual Basic

Accesso

Predefinito, pubblico, interno o privato.

Default, Friend o Public.

Kind

Classe, struct, interfaccia o enumerazione.

Classe, struttura, interfaccia, enumerazione, delegato o modulo.

Percorso progetto

Il progetto corrente o un altro progetto nella soluzione.

Il progetto corrente o un altro progetto nella soluzione.

Nome file

Creare nuovo file o aggiungere al file esistente con nome file.

Creare nuovo file o aggiungere al file esistente con nome file.

Se il tipo viene generato in un nuovo file, quest'ultimo conterrà il set predefinito di direttive using per una classe generata dalla finestra di dialogo Aggiungi nuovo elemento.

Se il tipo viene generato in un altro progetto nella soluzione, al file corrente viene aggiunta una direttiva using che fa riferimento a tale progetto.

Generazione di uno stub di interfaccia

Per generare codice da un'interfaccia non definita, fare clic su Genera nuovo tipo. Viene visualizzata la finestra di dialogo Genera nuovo tipo. Nell'elenco Tipo fare clic su interfaccia. In Visual Basic è inoltre possibile fare clic su Genera interfaccia.

Si supponga ad esempio di generare l'interfaccia IAuto dall'istruzione nel codice riportato di seguito.

Public Class Sedan : Implements IAuto
End Class
public class Sedan : IAuto
{
}

Quando si genera l'interfaccia, viene creato lo stub seguente.

Interface IAuto

End Interface
interface IAuto
{
}

Generazione di uno stub delegato

Per generare codice da un delegato non definito in Visual Basic, fare clic su Genera nuovo tipo. Viene visualizzata la finestra di dialogo Genera nuovo tipo. Nell'elenco Tipo fare clic su Delegato.

Si supponga, ad esempio, di generare il delegato MathOperator dall'istruzione nel codice riportato di seguito.

Dim delInstance As New MathOperator(AddressOf AddNumbers)

Quando si genera il delegato, viene creato lo stub seguente.

Delegate Sub MathOperator()

Modalità di suggerimento di IntelliSense

In IntelliSense sono disponibili due alternative per il completamento di istruzioni: la modalità di terminazione e la modalità di suggerimento. Utilizzare la modalità di suggerimento per le situazioni in cui si utilizzano classi e membri prima di definirli.

In modalità di suggerimento di IntelliSense, quando si digita nell'editor di codice e si esegue il commit della voce, il testo digitato viene inserito nel codice. Quando si esegue il commit di una voce in modalità di terminazione di IntelliSense, nell'elenco dei membri la voce evidenziata viene inserita nel codice.

Quando è aperta una finestra IntelliSense, è possibile premere CTRL+ALT+BARRA SPAZIATRICE per passare dalla modalità di terminazione alla modalità di suggerimento e viceversa.

Per ulteriori informazioni, vedere Elenca membri.

Vedere anche

Attività

Procedura dettagliata: supporto test preliminare con la funzionalità di generazione dall'utilizzo

Altre risorse

Strumenti di codifica

Generazione automatica di codice