Share via


Instrucciones de uso de constructores

En las reglas siguientes se describen las instrucciones de uso de constructores:

  • Proporcione un constructor privado predeterminado cuando sólo haya propiedades y métodos estáticos en una clase. En el siguiente ejemplo, el constructor privado evita que se genere una clase.

    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.
       }
    }
    
  • Reduzca al mínimo la cantidad de trabajo realizado en el constructor. Los constructores no deberían hacer más que capturar el parámetro o parámetros de constructor. Esto retrasa el costo que suponen más operaciones hasta que el usuario utilice una función específica de la instancia.

  • Proporcione un constructor para cada clase. Si no se puede crear un tipo, use un constructor privado. Si no especifica un constructor, muchos lenguajes de programación (como C#) agregan implícitamente un constructor público predeterminado. Si la clase es abstracta, agrega un constructor protegido.

    Tenga en cuenta que si agrega un constructor no predeterminado a una clase en una compilación posterior de la versión, el constructor predeterminado implícito será eliminado, lo que puede dañar el código de cliente. Por lo tanto, lo mejor es especificar siempre de forma explícita el constructor, aunque se trate de un constructor público predeterminado.

  • Proporcione un constructor protected (Protected en Visual Basic) que se pueda utilizar en los tipos de una clase derivada.

  • No proporcione constructores sin parámetros para los valores del tipo struct. Tenga en cuenta que muchos compiladores no admiten que struct tenga un constructor sin parámetros. Si no se incluye un constructor, el tiempo de ejecución inicializa todos los campos de struct con un valor cero. Esto hace que la creación de campos estáticos y matrices sea más rápida.

  • Utilice los parámetros de los constructores como un método abreviado para establecer propiedades. No debe haber ninguna diferencia semántica entre un constructor vacío seguido de descriptores de acceso set y un constructor con múltiples argumentos. Los tres ejemplos de código siguiente son equivalentes:

    ' 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");
    
  • Utilice un modelo de nomenclatura y de orden coherente en los parámetros de constructores. Un modelo común de parámetros de constructores sirve para proporcionar un número de parámetros cada vez mayor que permita a los programadores especificar el nivel de información deseado. Cuantos más parámetros especifique, más detalles puede especificar el programador. En el siguiente código de ejemplo, se muestra un modelo de orden y nomenclatura de parámetros coherente para todos los constructores de 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)
    }
    

Vea también

Instrucciones de diseño para programadores de bibliotecas de clases | Instrucciones de uso de miembros de clases