2010-03-12 14 views
26

La clase A usa una lista de inicializadores para establecer el miembro en el valor del parámetro, mientras que la clase B usa la asignación dentro del cuerpo del constructor.Al inicializar en C# constructores, ¿qué es mejor: listas de inicializador o asignación?

¿Alguien puede dar alguna razón para preferir uno sobre el otro, siempre y cuando sea consistente?

class A 
{ 
    String _filename; 

    A(String filename) : _filename(filename) 
    { 
    } 
} 


class B 
{ 
    String _filename; 

    B(String filename) 
    { 
     _filename = filename; 
    } 
} 

Respuesta

67

La primera no es legal en C#. Los únicos dos elementos que pueden aparecer después de los dos puntos en un constructor son base y this.

Así que iría con la segunda.

+9

Gracias, viniendo de C++ Me preguntaba si la sintaxis A (lista de inicialización de miembros) también era viable para C#. –

15

¿Quiso decir C++ en lugar de C#?

para C++, listas de inicializador son mejores que la asignación por un par de razones:

  • Para los tipos de POD (int, float, etc ..), el optimizador menudo puede hacer un establecimiento de memoria más eficiente detrás de las escenas cuando proporciona inicializadores para los datos.
  • Para tipos (objetos) que no sean POD, usted gana eficiencia al hacer solo una construcción. Con la asignación en el constructor, el compilador primero debe construir su objeto, luego asignarlo en un paso separado (esto también se aplica a los tipos de POD).
0

C# tiene una función llamada Object Initializer. Puede proporcionar valores que el compilador utilizará para inicializar los miembros especificados y llamar al constructor predeterminado. Para que esto funcione, debes tener un constructor predeterminado público.

Cuestiones relacionadas