Beruflich Dokumente
Kultur Dokumente
MAPA CONCEPTUAL
CONSTRUCTOR
ISMB -3
27/08/2010
CONSTRUCTOR
CONSTRUCTOR
SINTAXIS
public class Taxi
{
public bool isInitialized;
public Taxi()
{
isInitialized = true;
}
}
class TestTaxi
{
static void Main()
{
Taxi t = new Taxi();
System.Console.WriteLine(t.isInitialized);
}
}
2
CONSTRUCTORES
Cada vez que se crea una clase o estructura, se llama a su constructor. Una clase o estructura puede
tener varios constructores que toman argumentos diferentes. Los constructores permiten al programador
establecer valores predeterminados, limitar la creación de instancias y escribir código flexible y fácil de
leer.
Si no proporciona un constructor para el objeto, C# creará uno de forma predeterminada que crea
instancias del objeto y establecer las variables miembro con los valores predeterminados indicados en:
Tabla de valores predeterminados (Referencia de C#). Las clases y estructuras estáticas también pueden
tener constructores.
Los constructores son métodos de clase que se ejecutan cuando se crea un objeto de un tipo
determinado. Los constructores tienen el mismo nombre que la clase y, normalmente, inicializan los
miembros de datos del nuevo objeto.
En el ejemplo siguiente, una clase denominada Taxi se define con un constructor simple. Esta clase crea
instancias con el operador new. El operador new invoca el constructor Taxi inmediatamente después de
asignar la memoria al nuevo objeto.
C#
public class Taxi
{
public bool isInitialized;
public Taxi()
{
isInitialized = true;
}
}
class TestTaxi
{
static void Main()
{
Taxi t = new Taxi();
System.Console.WriteLine(t.isInitialized);
}
}
Un constructor que no toma ningún parámetro se denomina constructor predeterminado. Se invocan los
constructores predeterminados cada vez que se crea una instancia de un objeto mediante el operador
new y no se proporciona ningún argumento a new. Para obtener más información, vea Constructores de
instancias (Guía de programación de C#).
A menos que la clase sea estática, a las clases sin constructores se les asigna un constructor público
predeterminado a través del compilador de C# con el fin de habilitar la creación de instancias de clases.
Para obtener más información, vea Clases estáticas y sus miembros (Guía de programación de C#).
Es posible evitar que se creen instancias de una clase mediante la conversión del constructor a privado,
como se muestra a continuación:
2
C#
class NLog
{
// Private Constructor:
private NLog() { }
Para obtener más información, vea Constructores privados (Guía de programación de C#).
Los constructores para los tipos struct son similares a los constructores de clases, pero los tipos structs
no pueden contener un constructor predeterminado explícito porque el compilador proporciona uno
automáticamente. Este constructor inicializa cada campo de la estructura en los valores predeterminados
mostrados en la Tabla de valores predeterminados (Referencia de C#). Sin embargo, este constructor
predeterminado sólo se invoca si se crean instancias de la estructura con new. Por ejemplo, en este
código se utiliza el constructor predeterminado para Int32, lo que garantiza que se inicializa el tipo
integral:
Sin embargo, el código siguiente da como resultado el Error del compilador CS0165 porque no se utiliza
new y se intenta utilizar un objeto que no se ha inicializado:
int i;
Console.WriteLine(i);
Tanto las clases como las structs pueden definir constructores que acepten parámetros. Se debe llamar a
constructores que toman parámetros a través de una instrucción new o base. Las clases y las structs
también pueden definir varios constructores y no se requiere ninguno para definir un constructor
predeterminado. Por ejemplo:
C#
public class Employee
{
public int salary;
2
public Employee(int weeklySalary, int numberOfWeeks)
{
salary = weeklySalary * numberOfWeeks;
}
}
C#
Employee e1 = new Employee(30000);
Employee e2 = new Employee(500, 52);
Cualquier constructor puede utilizar la palabra clave base para llamar al constructor de una clase base.
Por ejemplo:
C#
public class Manager : Employee
{
public Manager(int annualSalary)
: base(annualSalary)
{
//Add further instructions here.
}
}
En este ejemplo, se llama al constructor de la clase base antes de ejecutar el bloque del constructor. La
palabra clave base se puede utilizar con o sin parámetros. Cualquier parámetro del constructor se puede
utilizar como parámetro de base o como parte de una expresión. Para obtener más información, vea
base (Referencia de C#).
En una clase derivada, si no se llama explícitamente al constructor de la clase base mediante la palabra
clave base, se llama implícitamente al constructor predeterminado, si hay uno. Esto significa que las
siguientes declaraciones del constructor son efectivamente las mismas:
C#
public Manager(int initialdata)
{
//Add further instructions here.
}
C#
public Manager(int initialdata) : base()
{
//Add further instructions here.
}
Si una clase base no proporciona un constructor predeterminado, la clase derivada debe realizar una
llamada explícita a un constructor base mediante base.
Un constructor puede invocar a otro constructor en el mismo objeto a través de la palabra clave this. Al
igual que base, this se puede utilizar con o sin parámetros y cualquier parámetro en el constructor está
disponible como parámetro para this o como parte de una expresión. Por ejemplo, el segundo
constructor del ejemplo anterior se puede rescribir con this:
2
C#
public Employee(int weeklySalary, int numberOfWeeks)
: this(weeklySalary * numberOfWeeks)
{
}
El uso de la palabra clave this utilizada anteriormente hace que este constructor se denomine:
C#
public Employee(int annualSalary)
{
salary = annualSalary;
}
Los constructores se pueden marcar como public, private, protected, internal o protected internal.
Estos modificadores de acceso definen cómo los usuarios de la clase pueden construir la clase. Para
obtener más información, vea Modificadores de acceso (Guía de programación de C#).
Un constructor se puede declarar como estático mediante la palabra clave static. Se llama
automáticamente a los constructores estáticos de forma inmediata antes de que se tenga acceso a
cualquier campo estático y, normalmente, se utilizan para inicializar los miembros de clase estáticos. Para
obtener más información, vea Constructores estáticos (Guía de programación de C#).