Esto es fácil de solucionar, pero tengo curiosidad si podría utilizar una función de idioma o posiblemente el hecho de que el lenguaje no lo permita significa que estoy cometiendo un error lógico en el diseño de clase.¿cómo llamo a los inicializadores de constructor, base() y this()?
estoy haciendo una revisión auto de mi código para ayudar a "endurecer" que para su reutilización y me acaba de llegar al otro lado:
public partial class TrackTyped : Component
{
IContainer components = null;
public TrackTyped()
: base()
{
InitializeComponent();
}
public TrackTyped(IContainer container)
: base()
{
container.Add(this);
InitializeComponent();
}
}
lo que suelo hacer cuando veo la misma línea de código en dos constructores hacen una llamada la otra con "this()" pero parece que no puedo hacerlo.
Si leo el derecho de especificaciones (acabo de empezar tratando de leer la especificación, así que puede no ser adecuado):
10.11 Instance Constructors
constructor-declarator:
identifier ( formal-parameter-listopt ) constructor-initializeropt
constructor-initializer:
: base ( argument-listopt )
: this ( argument-listopt )
Es como decir que sólo puedo tener uno de esos.
PREGUNTA: ¿es 10.11 lo que implica que no hay razón para necesitar llamar a ambos o simplemente está implicando que el lenguaje solo admite llamar a uno?
Gracias a TODOS por la respuesta (obvio ahora, no tan obvio para mí hace un momento) :) –
no, simplemente no pensé en la respuesta por alguna razón, no creo en el contenedor.Añadir (esto) tiene que suceder antes de InitializeComponent() - y si lo hiciera probablemente me preguntaría si eso fue un signo de diseño extraño. –
en el ejemplo, "new TrackedType()" primero se ejecuta, luego .Add(). Personalmente, me parece más claro de esa manera. Téngalo en cuenta para más tarde quizás. – sgtz