Si te encuentras con algún detalle que te causa duda puedes dejarlo en la sección de comentarios y trataremos de ayudarte lo mas rápido que podamos.
Solución:
Usas sintaxis estándar (usando this
como un método) para recoger la sobrecarga, en el interior la clase:
class Foo
private int id;
private string name;
public Foo() : this(0, "")
public Foo(int id, string name)
this.id = id;
this.name = name;
public Foo(int id) : this(id, "")
public Foo(string name) : this(0, name)
luego:
Foo a = new Foo(), b = new Foo(456,"def"), c = new Foo(123), d = new Foo("abc");
Tenga en cuenta también:
- puede encadenar a constructores en el tipo base usando
base(...)
- puedes poner código extra en cada constructor
- el valor predeterminado (si no especifica nada) es
base()
¿Para que?”:
- reducción de código (siempre es algo bueno)
-
necesario para llamar a un constructor base no predeterminado, por ejemplo:
SomeBaseType(int id) : base(id) ...
Sin embargo, tenga en cuenta que también puede usar inicializadores de objetos de una manera similar (sin necesidad de escribir nada):
SomeType x = new SomeType(), y = new SomeType Key = "abc" ,
z = new SomeType DoB = DateTime.Today ;
Solo quiero mencionar un punto válido para cualquiera que busque esto. Si va a trabajar con versiones de .NET anteriores a la 4.0 (VS2010), tenga en cuenta que debe crear cadenas de constructores como se muestra arriba.
Sin embargo, si te quedas en 4.0, tengo buenas noticias. ¡Ahora puede tener un solo constructor con argumentos opcionales! Simplificaré el ejemplo de la clase Foo:
class Foo
private int id;
private string name;
public Foo(int id = 0, string name = "")
this.id = id;
this.name = name;
class Main()
// Foo Int:
Foo myFooOne = new Foo(12);
// Foo String:
Foo myFooTwo = new Foo(name:"Timothy");
// Foo Both:
Foo myFooThree = new Foo(13, name:"Monkey");
Cuando implementa el constructor, puede usar los argumentos opcionales ya que se han establecido los valores predeterminados.
¡Espero que hayas disfrutado esta lección! ¡Simplemente no puedo creer que los desarrolladores se hayan quejado del encadenamiento de construcciones y de no poder usar argumentos opcionales predeterminados desde 2004/2005! Ahora ha tomado TANTO tiempo en el mundo del desarrollo, que los desarrolladores tienen miedo de usarlo porque no será compatible con versiones anteriores.
Esto se ilustra mejor con un ejemplo. Imaging tenemos una persona de clase
public Person(string name) : this(name, string.Empty)
public Person(string name, string address) : this(name, address, string.Empty)
public Person(string name, string address, string postcode)
this.Name = name;
this.Address = address;
this.Postcode = postcode;
Entonces, aquí tenemos un constructor que establece algunas propiedades y usa el encadenamiento de constructores para permitirle crear el objeto con solo un nombre, o solo un nombre y una dirección. Si crea una instancia con solo un nombre, esto enviará un valor predeterminado, string.Empty hasta el nombre y la dirección, que luego envía un valor predeterminado para el código postal al constructor final.
Al hacerlo, está reduciendo la cantidad de código que ha escrito. En realidad, solo un constructor tiene código, no se está repitiendo, por lo que, por ejemplo, si cambia el Nombre de una propiedad a un campo interno, solo necesita cambiar un constructor, si establece esa propiedad en los tres constructores serían tres lugares para cambiarlo.
Si sostienes alguna perplejidad y capacidad de reformar nuestro ensayo te invitamos añadir una glosa y con deseo lo analizaremos.