Share via


Istruzioni per l'uso dei costruttori

Le istruzioni per l'uso dei costruttori sono definite dalle regole riportate di seguito.

  • Fornire un costruttore privato predefinito se esistono solo proprietà e metodi static su una classe. Nell'esempio seguente il costruttore privato impedisce la creazione della classe.

    NotInheritable Public Class Environment
       ' Private constructor prevents the class from being created.
       PrivateSub New()
          ' Code for the constructor goes here.
       End Sub
    End Class
    [C#]
    public sealed class Environment
    {
       // Private constructor prevents the class from being created.
       privateEnvironment()
       {
          // Code for the constructor goes here.
       }
    }
    
  • Ridurre al minimo la quantità di lavoro eseguita dal costruttore. I costruttori devono limitarsi ad acquisire il parametro o i parametri del costruttore. In questo modo il carico necessario per eseguire operazioni aggiuntive viene ritardato fino al momento in cui l'utente non utilizza una funzionalità specifica dell'istanza.

  • Fornire un costruttore per ogni classe. Se non si intende consentire la creazione di un tipo, utilizzare un costruttore privato. Se non viene specificato un costruttore, in numerosi linguaggi di programmazione, ad esempio C#, verrà aggiunto un costruttore pubblico predefinito in modo implicito. Se si tratta di una classe abstract, verrà aggiunto un costruttore protetto.

    Se in una successiva versione si aggiunge un costruttore non predefinito a una classe, la rimozione del costruttore implicito predefinito può determinare l'interruzione del codice client. È quindi preferibile specificare sempre in modo esplicito il costruttore, anche se rappresenta un costruttore pubblico predefinito.

  • Fornire un costruttore protected (Protected in Visual Basic) che può essere utilizzato dai tipi in una classe derivata.

  • È preferibile non utilizzare un costruttore senza parametri per un tipo di valore struct. Numerosi compilatori non consentono di utilizzare un tipo struct con un costruttore senza parametri. Se non si fornisce un costruttore, tutti i campi del valore struct verranno inizializzati su zero. In questo modo è possibile creare campi static e matrici più rapidamente.

  • Utilizzare i parametri nei costruttori come scelta rapida per l'impostazione delle proprietà. Dal punto di vista semantico non dovrebbero esserci differenze tra l'uso di un costruttore vuoto seguito dalle funzioni di accesso set della proprietà e l'uso di un costruttore con più argomenti. I tre codici di esempio riportati di seguito sono equivalenti.

    ' Example #1.
    Dim SampleClass As New Class()
    SampleClass.A = "a"
    SampleClass.B = "b"
    
    ' Example #2.
    Dim SampleClass As New Class("a")
    SampleClass.B = "b"
    
    ' Example #3.
    Dim SampleClass As New Class("a", "b")
    [C#]
    // Example #1.
    Class SampleClass = new Class();
    SampleClass.A = "a";
    SampleClass.B = "b";
    
    // Example #2.
    Class SampleClass = new Class("a");
    SampleClass.B = "b";
    
    // Example #3.
    Class SampleClass = new Class ("a", "b");
    
  • Utilizzare un modello di denominazione e ordinamento uniforme per i parametri dei costruttori. Un criterio comune per i parametri dei costruttori è quello di fornire un numero crescente di parametri per consentire allo sviluppatore di specificare il livello di informazioni desiderato. Più alto è il numero di parametri specificato, maggiori sono i dettagli che possono essere definiti dallo sviluppatore. Nell'esempio di codice seguente è indicato un modello di denominazione e ordinamento dei parametri uniforme per tutti i costruttori SampleClass.

    Public Class SampleClass
       Private Const defaultForA As String = "default value for a"
       Private Const defaultForB As String = "default value for b"
       Private Const defaultForC As String = "default value for c"
    
       Public Sub New()
          MyClass.New(defaultForA, defaultForB, defaultForC)
          Console.WriteLine("New()")
       End Sub
    
       Public Sub New(a As String)
          MyClass.New(a, defaultForB, defaultForC)
       End Sub 
    
       Public Sub New(a As String, b As String)
          MyClass.New(a, b, defaultForC)
       End Sub 
       Public Sub New(a As String, b As String, c As String)
          Me.a = a
          Me.b = b
          Me.c = c
       End Sub
    End Class
    [C#]
    public class SampleClass 
    {
       private const string defaultForA = "default value for a";
       private const string defaultForB = "default value for b";
       private const string defaultForC = "default value for c";
    
       public MyClass():this(defaultForA, defaultForB, defaultForC) {}
       public MyClass (string a) : this(a, defaultForB, defaultForC) {}
       public MyClass (string a, string b) : this(a, b, defaultForC) {}
       public MyClass (string a, string b, string c)
    }
    

Vedere anche

Istruzioni di progettazione per gli sviluppatori di librerie di classi | Istruzioni per l'uso dei membri di classe