toma sobreescritura sobrecarga sirve que programacion para orientada objetos ninguna metodos metodo ejemplos ejemplo constructores argumentos c# constructor

c# - sobreescritura - sobrecarga de metodos en programacion orientada a objetos



¿Puedo llamar a un constructor sobrecargado de otro constructor de la misma clase en C#? (4)

EDITAR: De acuerdo con los comentarios en la publicación original, esta es una pregunta de C #.

Respuesta corta: sí, usando la palabra clave this .

Respuesta larga: sí, usando la palabra clave this , y aquí hay un ejemplo.

class MyClass { private object someData; public MyClass(object data) { this.someData = data; } public MyClass() : this(new object()) { // Calls the previous constructor with a new object, // setting someData to that object } }

¿Puedo llamar a un constructor sobrecargado de otro constructor de la misma clase en C #?


En C # no es posible llamar a otro constructor desde dentro del cuerpo del método. Puede llamar a un constructor base de esta manera: foo (args): base () como se señaló usted mismo. También puede llamar a otro constructor en la misma clase: foo (args): this ().

Cuando quieres hacer algo antes de llamar a un constructor base, parece que la construcción de la base es una clase que depende de algunas cosas externas. Si es así, debes hacerlo a través de argumentos del constructor base, no estableciendo propiedades de la clase base o algo así


No, no puedes hacer eso, el único lugar donde puedes llamar al constructor desde otro constructor en C # es inmediatamente después de ":" después del constructor. por ejemplo

class foo { public foo(){} public foo(string s ) { } public foo (string s1, string s2) : this(s1) {....} }


Si te refieres a si puedes hacer ctor encadenamiento en C #, la respuesta es sí. La pregunta ya ha sido hecha.

Sin embargo, parece que a partir de los comentarios, parece que lo que realmente pretendes preguntar es ''¿Puedo llamar a un constructor sobrecargado desde otro constructor con procesamiento previo / posterior?''
Aunque C # no tiene la sintaxis para hacer esto, puede hacer esto con una función de inicialización común (como lo haría en C ++ que no admite el encadenamiento de ctor)

class A { //ctor chaining public A() : this(0) { Console.WriteLine("default ctor"); } public A(int i) { Init(i); } // what you want public A(string s) { Console.WriteLine("string ctor overload" ); Console.WriteLine("pre-processing" ); Init(Int32.Parse(s)); Console.WriteLine("post-processing" ); } private void Init(int i) { Console.WriteLine("int ctor {0}", i); } }